0

我有一个n16 位数长的号码 ( 1111111111111111)。当我向这个数字添加另一个1(使其为1111111111111111117 位长)时,它显示为11111111111111112.

这是可以理解的,因为它大于Number.MAX_SAFE_INTEGER,但是如果我添加 a0代替(使其11111111111111110仍然为 17 位长),该数字将正确显示为11111111111111110

let a = 11111111111111111;
let b = 11111111111111110;

console.log(a, b); // 11111111111111112 11111111111111110

上述行为发生在任何最后一位数字上,除了0. 这种行为差异的原因是什么?


我看过“Javascript 中错误地舍入的大数字”,但这并不能解释为什么在添加非零数字时舍入它,而不是在添加零时舍入。

4

1 回答 1

0

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

于 2017-01-19T11:50:17.573 回答