当我在Javascript中将大数字转换为字符串时,会发生这种情况,它似乎给了我一个我不期望的结果:
var x = 1234567890123456;
console.log(x)// 1234567890123456 --equal ...
console.log(x.toString())// 1234567890123456 --equal ...
var x = 12345678901234567;
console.log(x)// 12345678901234568 - 不同!
console.log(x.toString())// 12345678901234568 - 不同!
var x = 123456789012345678;
console.log(x)// 123456789012345680 - 不同!
console.log(x.toString())// 123456789012345680 - 不同!
console.log(x +“”)// 123456789012345680 - 不同!
任何人都可以告诉我这个的原因,以及如何处理它?</ p>
答案 0 :(得分:5)
原因是javascript(+/- 9007199254740992)中的数字最大值而不会丢失精度。另请参阅this question。
答案 1 :(得分:3)
Javascript没有无限的数字精度。在8字节双精度浮点值中,它将跟踪有效位数的限制。
有关更具体的详细信息,请参阅actual ECMA Number spec section 8.5。引用该规范:
注意所有正数和负数的整数,其大小为否 大于2 ^ 53可在数字类型
中表示
2 ^ 53 == 9007199254740992