我在一个函数中有一些逻辑,它接受一串称为数字的数字,如下所示:
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?
您无法存储“准确数字”,因此您无法准确转换它。然而,有些库允许您像处理数字一样处理字符串,例如 BigIntJS。 .
由于这是一个常见问题,这将在下一个 JS 版本中解决,请参阅 proposal .您目前可以在新版 chrome 中进行测试。
关于javascript - 为什么 parseInt() 没有正确转换我的数字字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51215954/