为什么 console.log 不显示分配的 var 的 IEEE-754 浮点值?

Why does console.log not show IEEE-754 floating point value of assigned var?

我知道 JavaScript 中的浮点值以 IEEE 754 中指定的二进制 base-2 格式存储。对我来说,这意味着当我将文字值 .1 分配给变量,实际存储的值将是 0.100000001490116119384765625(或类似的一些高精度数字——我的数学可能是错误的)。

但与该假设相反,存储值的 console.log 并未反映这一点。以下代码: var a = 0.1; console.log(a);

...在 Chrome 中执行时,可能还有其他浏览器,将输出: 0.1

我原以为是: 0.100000001490116119384765625

此时 a 的值是否保持 0.10.1000000...?如果是后者,那么console.log()又是通过什么方式显示0.1呢?我对这里的幕后情况很感兴趣。 (例如,JS是否将数字的文本表示形式存储在变量中?)

勤奋的管理员可能会 "mark as duplicate",请注意,我问的是 相反 更常见的问题和变体 "Why do I suddenly see these wacky high-precision numbers?"

你说得对!尽管如此,我从来没有注意到这一点,也无法解释。也许有些不同。我想它只是没有显示出来,因为它会激怒很多人,而且对于大多数东西来说,这不是问题。

var a = 0.1;
console.log(a.toPrecision(21))

JavaScript’s default formatting of floating-point values uses just enough decimal digits to uniquely distinguish the value from neighboring floating-point values.

这个问题是重复的,除了它使用 console.log,它在 JavaScript 之外。 JavaScript的标准,ECMAScript 2017 Language Specification没有提到console。此功能由供应商作为扩展提供。所以每个供应商都可以实现自己的行为。但是,将 console.logNumber 一起使用可能会使用通常的 ToString 行为,从而导致上面链接的答案中的转换解释。