我试图将此数字增加1:9223372036854775808
:
var number = 9223372036854775808;
var plusOne = number + 1;
这应该会产生922337203685477580 9 ,但它会产生9223372036854776000。
为什么呢?更重要的是,我该如何解决这个问题?
答案 0 :(得分:6)
largest representable number in JavaScript为(2^53) - 1
,或写出9007199254740991
。您拥有的数字9223372036854775808
超过1024 times数量。
如果您想使用大于上述数字的数字,则应使用大整数库。但是,JavaScript没有内置的,因此您需要自己抓取它。就个人而言,当我处理涉及非常大数字的事情时,我会使用big-integer,例如Project Euler。
答案 1 :(得分:4)
这与JavaScript内部存储数字为(双精度)浮点有关。随着浮点数的增加,数字变得越来越稀疏,直到你得到不正确的结果,因为下一个可表示的数字超过1(如你的例子中所示)。要正确处理大数字,您需要使用适当的大数字库,例如javascript-bignum。如果您只需要整数,则可以使用BigInteger.js