无法在 JavaScript 内将极大的数字增加一

Unable to increase extremely large number by one in JavaScript

我想把这个数字加一:9223372036854775808:

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

这应该产生 9223372036854775809,但它却产生 9223372036854776000。

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

largest representable number in JavaScript is (2^53) - 1, or, written out, 9007199254740991. The number you have, 9223372036854775808, is more than 1024 times那个数量。

如果你想处理比上面更大的数字,你应该使用大整数库。但是,JavaScript 没有内置,因此您需要自己获取。就个人而言,当我处理处理非常大的数字的事情时,我使用 big-integer,例如 Project Euler。

这与 JavaScript 在内部将数字存储为(双精度)浮点数有关。当您提高浮点数的规模时,数字会变得越来越稀疏,直到您得到不正确的结果为止,因为下一个可表示的数字距离 1 多(如您的示例所示)。要正确处理大数,您需要使用适当的大数库,例如 javascript-bignum. If you only need integers, you can use BigInteger.js