【问题标题】:JavaScript maximum number size different with trailing zerosJavaScript 最大数字大小与尾随零不同
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    相关资源
    最近更新 更多