在JavaScript中无法将极大数量增加一个

时间:2015-06-15 03:27:18

标签: javascript numbers

我试图将此数字增加1:9223372036854775808

var number = 9223372036854775808;
var plusOne = number + 1;

这应该会产生922337203685477580 9 ,但它会产生9223372036854776000。

为什么呢?更重要的是,我该如何解决这个问题?

2 个答案:

答案 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