我有一个n
16 位数长的号码 ( 1111111111111111
)。当我向这个数字添加另一个1
(使其为11111111111111111
17 位长)时,它显示为11111111111111112
.
这是可以理解的,因为它大于Number.MAX_SAFE_INTEGER
,但是如果我添加 a0
代替(使其11111111111111110
仍然为 17 位长),该数字将正确显示为11111111111111110
。
let a = 11111111111111111;
let b = 11111111111111110;
console.log(a, b); // 11111111111111112 11111111111111110
上述行为发生在任何最后一位数字上,除了0
. 这种行为差异的原因是什么?
我看过“Javascript 中错误地舍入的大数字”,但这并不能解释为什么在添加非零数字时舍入它,而不是在添加零时舍入。