为什么parseInt()无法正确转换我的数字字符串?

时间:2018-07-06 18:28:43

标签: javascript string integer parseint

我在函数中有一些逻辑,该逻辑接受一串称为数字的数字,如下所示:

6145390195186705543

然后我尝试使用parseInt()进行转换,如下所示:

  

parseInt(数字)

结果:

digits = parseInt(digits);

  

6145390195186705000

有人可以帮助我理解为什么会这样吗?以及如何获得准确的转化​​?

1 个答案:

答案 0 :(得分:1)

这是"broken" floating point math的另一个版本:Javascript使用64位存储数字,该数字小到一个原子的大小,最多到宇宙中的原子数。由于范围很广,因此无法准确存储,因此数字的存储方式不精确,但是代表的范围很广。在您的情况下,6145390195186705000是JS能够存储的版本不正确,因为6145390195186705543无法存储。

  

以及如何获得准确的转化​​?

您无法存储“准确的数字”,因此无法准确转换。但是,有些库使您可以像对待数字一样使用字符串,例如BigIntJS


由于这是一个常见问题,因此将在下一JS版本中解决,请参见此proposal。您目前可以在新版chrome中对其进行测试。