parseInt()使用指数错误地解析数字文字

Ion*_*zău 11 javascript numbers parseint node.js

我刚刚观察到,在parseInt整数(包含e字符的数字)的情况下,函数不会处理小数.

我们来举个例子: -3.67394039744206e-15

> parseInt(-3.67394039744206e-15)
-3
> -3.67394039744206e-15.toFixed(19)
-3.6739e-15
> -3.67394039744206e-15.toFixed(2)
-0
> Math.round(-3.67394039744206e-15)
0
Run Code Online (Sandbox Code Playgroud)

我预计这parseInt也会回归0.在较低级别发生了什么?为什么在这种情况下parseInt返回3(源代码中的一些片段会受到赞赏)?

在这个例子中我正在使用node v0.12.1,但我希望在浏览器和其他JavaScript引擎中也会发生同样的情况.

Aru*_*hny 16

我认为原因是parseInt通过调用ToString将传递的值转换为字符串将返回"-3.67394039744206e-15",然后解析它以便它将考虑-3并将返回它.

MDN文档

parseInt函数将其第一个参数转换为字符串,解析它,并返回一个整数或NaN

  • 看起来像 - 至少来自Mozilla docs:"如果parseInt遇到的字符不是指定基数中的数字,它会忽略它和所有后续字符并返回解析到该点的整数值.parseInt将数字截断为整数值允许前进和尾随空间." (8认同)
  • 是啊..这是'parseInt("200USD")`将返回'200`而不是失败或投掷.方便的功能,如果您了解它的工作原理. (3认同)