我在函数中有一些逻辑,该逻辑接受一串称为数字的数字,如下所示:
6145390195186705543
然后我尝试使用parseInt()进行转换,如下所示:
parseInt(数字)
结果:
digits = parseInt(digits);
是
6145390195186705000
有人可以帮助我理解为什么会这样吗?以及如何获得准确的转化?
答案 0 :(得分:1)
这是"broken" floating point math的另一个版本:Javascript使用64位存储数字,该数字小到一个原子的大小,最多到宇宙中的原子数。由于范围很广,因此无法准确存储,因此数字的存储方式不精确,但是代表的范围很广。在您的情况下,6145390195186705000
是JS能够存储的版本不正确,因为6145390195186705543
无法存储。
以及如何获得准确的转化?
您无法存储“准确的数字”,因此无法准确转换。但是,有些库使您可以像对待数字一样使用字符串,例如BigIntJS。
由于这是一个常见问题,因此将在下一JS版本中解决,请参见此proposal。您目前可以在新版chrome中对其进行测试。