在Javascript中将数字转换为字符串时是否有错误?

时间:2012-02-13 07:25:42

标签: javascript numbers

当我在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>

2 个答案:

答案 0 :(得分:5)

原因是javascript(+/- 9007199254740992)中的数字最大值而不会丢失精度。另请参阅this question

答案 1 :(得分:3)

Javascript没有无限的数字精度。在8字节双精度浮点值中,它将跟踪有效位数的限制。

有关更具体的详细信息,请参阅actual ECMA Number spec section 8.5。引用该规范:

  

注意所有正数和负数的整数,其大小为否   大于2 ^ 53可在数字类型

中表示

2 ^ 53 == 9007199254740992