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

标签 javascript string integer parseint

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

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/

相关文章:

javascript - setState 在 componentDidMount() 中不起作用 - React

java - 将 ArrayList 字符串转换为字符?

string - 使用正则表达式从字符串中提取日期

java - 卡住一个整数

javascript - 为什么 Number.MAX_SAFE_INTEGER 是 9,007,199,254,740,991 而不是 9,007,199,254,740,992?

php - 如何均衡64位到32位整数的值

javascript - 如何获取 Firefox 调试器监视的目标元素?

javascript - ReactJS - ReactMount : Root element has been removed from its original container. 新容器

javascript - 为什么在以下情况下需要 IIFE?

c - 反转c风格字符串