我的号码为n
,长度为16位(1111111111111111
)。当我向此号码添加另一个1
时(将其设为11111111111111111
,长度为17位),它会显示为11111111111111112
。
这是可以理解的,因为它大于Number.MAX_SAFE_INTEGER
,但是如果我添加0
(使其成为11111111111111110
,仍然是17位数),则该数字会正确显示为{ {1}}。
11111111111111110
除了let a = 11111111111111111;
let b = 11111111111111110;
console.log(a, b); // 11111111111111112 11111111111111110
之外,任何最终数字都会发生上述行为。这种行为差异的原因是什么?
我查看了"Large numbers erroneously rounded in Javascript",但这并没有解释为什么在添加非零数字时舍入为什么,而不是在添加零时为什么。
答案 0 :(得分:0)
这是因为在Javascript中,数字存储为双精度浮点数。大整数超出了双精度的精度范围,因此它们变得不准确。