JavaScript最大数字大小与尾随零不同

时间:2016-11-16 11:34:02

标签: javascript node.js google-chrome v8 chakra

我的号码为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",但这并没有解释为什么在添加非零数字时舍入为什么,而不是在添加零时为什么。

1 个答案:

答案 0 :(得分:0)

这是因为在Javascript中,数字存储为双精度浮点数。大整数超出了双精度的精度范围,因此它们变得不准确。