JavaScript整数除法结果错误

4
我无法理解在JavaScript中,100000000000000030/10 = 10000000000000004的原因,我在其他问题中没有看到过这个问题。

  <script>
    alert(100000000000000030/10);
  </script>


1
只是好奇:您在哪种情况下使用这个计算?因为那是一个非常大的数字。您能展示一下周围的代码吗? - Virginia
1
计算机数学就像计算机音乐一样,是数学和音乐的结合。也许编写一些代码来证明这个问题。如果没有最小可重现示例,这个问题就不完整。 - user1531971
3
JavaScript使用双精度浮点数表示数字。你可能会遇到一些像这样的异常情况。 - Robert Harvey
这是错误的重复(但它有些相关)。您正在使用大于Number.MAX_SAFE_INTEGER的数字。JavaScript“整数”只有53位精度。目前找到的最接近的问题是:https://stackoverflow.com/q/10636570/218196 - Felix Kling
@RobertHarvey 呵呵。嗯,我们并不是真的知道提供的示例是纯净的,还是使用了一些奇怪的库。随着包管理器越来越流行,你永远不知道别人从互联网借用的代码是否是问题的根源,除非实际查看它。 - user1531971
显示剩余7条评论
1个回答

4
在进行这个计算之前,您可能想知道这个数字是否是安全的javascript数字。您可以使用- Number.isSafeInteger(100000000000000030)来了解。
“MAX_SAFE_INTEGER常量的值为9007199254740991(9,007,199,254,740,991或〜9千亿)。这个数字背后的原因是JavaScript使用IEEE 754规定的双精度浮点格式数字,并且只能安全地表示-(253-1)和253-1之间的数字。”
您可能还想在此处阅读更多内容 - 在JavaScript中对大数进行除法和取余

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接