js parseInt()一关(大数)

时间:2018-05-14 05:40:33

标签: javascript

当我运行以下内容时:

parseInt('96589218797811259658921879781126'.slice(0, 16), 10);

输出

9658921879781124

而预期是,正如您所见:

9658921879781125

原因是什么?我在谷歌搜索时隐约知道JS中有issues with large numbers并且这确实看起来超过了这个阈值,但我不知道该怎么做,或者在这个特定情况下发生了什么。谢谢。

编辑:感谢您的回答,我看到这取决于整数这个大小是坏消息。使用整数的原因是因为我需要增加1,然后与字符串的其余部分进行比较。在这种情况下,在将前半部分递增1之后,字符串的前半部分应等于后半部分。什么是替代方法?

1 个答案:

答案 0 :(得分:0)

这不是JavaScript问题。

JavaScript使用double-precision 64-bit floating point format(IEEE 754)来存储整数和有理数。

此格式允许在-2 53 和2 53 -90071992547409929007199254740992)之间精确表示整数。在此间隔之外,此格式无法表示某些整数值;它们四舍五入到可以表示的最接近的整数值。例如,从2 53 到2 54 ,一切都乘以2,因此可表示的数字是偶数。

JavaScript全局对象Number提供常量Number.MAX_SAFE_INTEGER,表示IEEE 574格式可存储的最大整数值(2 53 -1)。< / p>

它还提供了方法Number.isSafeInteger(),您可以使用它来确定Number JavaScript类型是否可以安全地存储整数。

您使用的数字(9658921879781124)太大,无法在JavaScript或任何其他使用双精度浮点格式存储数字的语言中正确存储。