【发布时间】:2016-11-16 11:34:01
【问题描述】:
我有一个 16 位数字的号码 n (1111111111111111)。当我向这个号码添加另一个1(使其成为11111111111111111,17 位长)时,它显示为11111111111111112。
这是可以理解的,因为它比 Number.MAX_SAFE_INTEGER 大,但是如果我添加一个 0(使其变为 11111111111111110,仍然是 17 位长),该数字将正确显示为 11111111111111110。
let a = 11111111111111111;
let b = 11111111111111110;
console.log(a, b); // 11111111111111112 11111111111111110
除了0 之外,任何最后一位数字都会出现上述行为。造成这种行为差异的原因是什么?
我查看了"Large numbers erroneously rounded in Javascript",但这并不能解释为什么添加非零数字时它会被四舍五入,而不是添加零时。
【问题讨论】:
-
看起来像 javascript 中的整数舍入问题
-
投反对票:为什么投反对票?这是一个解释清楚的问题,我找不到重复的问题。
-
@Xufox 我已经编辑了我的问题以解释为什么它不是重复的。
-
@JamesMonger 我认为,另一个问题的答案已经充分解释了这一点,所以没有。
标签: javascript node.js google-chrome v8 chakra