当我运行以下内容时:
parseInt('96589218797811259658921879781126'.slice(0, 16), 10);
输出
9658921879781124
而预期是,正如您所见:
9658921879781125
原因是什么?我在谷歌搜索时隐约知道JS中有issues with large numbers并且这确实看起来超过了这个阈值,但我不知道该怎么做,或者在这个特定情况下发生了什么。谢谢。
编辑:感谢您的回答,我看到这取决于整数这个大小是坏消息。使用整数的原因是因为我需要增加1,然后与字符串的其余部分进行比较。在这种情况下,在将前半部分递增1之后,字符串的前半部分应等于后半部分。什么是替代方法?
答案 0 :(得分:0)
这不是JavaScript问题。
JavaScript使用double-precision 64-bit floating point format(IEEE 754)来存储整数和有理数。
此格式允许在-2 53 和2 53 (-9007199254740992
到9007199254740992
)之间精确表示整数。在此间隔之外,此格式无法表示某些整数值;它们四舍五入到可以表示的最接近的整数值。例如,从2 53 到2 54 ,一切都乘以2
,因此可表示的数字是偶数。
JavaScript全局对象Number
提供常量Number.MAX_SAFE_INTEGER
,表示IEEE 574格式可存储的最大整数值(2 53 -1)。< / p>
它还提供了方法Number.isSafeInteger()
,您可以使用它来确定Number
JavaScript类型是否可以安全地存储整数。
您使用的数字(9658921879781124
)太大,无法在JavaScript或任何其他使用双精度浮点格式存储数字的语言中正确存储。