我知道JavaScript中的浮点值是以IEEE 754中指定的二进制base-2格式存储的。对我来说,这意味着当我将文字值.1
赋给变量时,实际存储的值将是0.100000001490116119384765625(或者那样的高精度数字 - 我的数学可能是错的)。
但与此假设相反,存储值的console.log
并未反映出这一点。以下代码:
var a = 0.1;
console.log(a);
...在Chrome中执行时,可能还有其他浏览器会输出:
0.1
我原以为是:
0.100000001490116119384765625
此时a
的值是0.1
还是0.1000000...
?如果是后者,那么console.log()
显示0.1
的方式是什么?我对这里发生的事情很感兴趣。 (例如,JS是否在变量中存储了数字的文本表示?)
对于那些可能会快速“标记为重复”的勤奋管理员,请注意我问的是相反更常见的问题和变体“为什么我突然看到这些古怪高精度数字?“
答案 0 :(得分:3)
这个问题是重复的,除了它使用console.log
之外的JavaScript。 JavaScript的标准, ECMAScript 2017语言规范未提及console
。供应商将此功能作为扩展提供。因此每个供应商都可以实现自己的行为。但是,将console.log
与Number
一起使用会有可能使用通常的ToString
行为,从而导致上面链接的答案中的转换解释。
答案 1 :(得分:1)
你是对的!我永远不会注意到这一点,也无法解释它。也许有些不同。我认为它只是没有显示,因为它会激怒很多人,对大多数人来说这不是问题。
var a = 0.1;
console.log(a.toPrecision(21))