【问题标题】:Why is parseInt() not converting my String of numbers correctly?为什么 parseInt() 不能正确转换我的数字字符串?
【发布时间】:2018-07-06 18:28:42
【问题描述】:

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

6145390195186705543

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

parseInt(数字)

结果:

digits = parseInt(digits);

6145390195186705000

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

【问题讨论】:

标签: javascript string integer parseint


【解决方案1】:

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

以及如何获得准确的转换?

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


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

【讨论】:

  • 该死,有没有一种简单的方法可以解决这个问题,或者我需要专注于最后一位数字作为一种方法。
  • @newScientists 是的,那里有一些图书馆
  • 我不能使用库,找到后会发布算法和解决方案。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 2012-07-26
  • 1970-01-01
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
相关资源
最近更新 更多