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

Why is parseInt() not converting my String of numbers correctly?

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

6145390195186705543

然后我尝试像这样使用 parseInt() 进行转换:

parseInt(digits)

结果:

digits = parseInt(digits);

6145390195186705000

谁能帮我理解为什么会这样?以及如何获得准确的转换?

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

and how i can get an accurate conversion?

您无法存储 "accurate number",因此您无法准确转换它。但是,有些库允许您像处理数字一样处理字符串,例如 BigIntJS.


由于这是一个常见问题,这将在下一个 JS 版本中解决,请参阅此 proposal。您目前可以在chrome.

的新版本中进行测试