2

可能重复:
为什么 parseInt() 会这样工作?

我遇到了 parseInt() 意外返回 0 的问题,这是一个示例:

parseInt('-06') = -6
parseInt('-07') = -7
parseInt('-08') = 0

为什么结果为 0?如果我继续下降(-09、-10 等),也一样。字符串的格式来自我的框架,所以我需要处理它。谢谢!

4

3 回答 3

11

使用时需要传递一个基数参数parseInt

parseInt('-08', 10);

如果您不这样做,并且您正在解析的字符串具有前导零,parseInt则会根据您的浏览器产生不同的结果。最常见的问题是字符串将被视为以 8 为基数的数字,这就是您所看到的。

这就是为什么这适用于“-06”和“-07”——它们都是有效的以 8 为基数的数字。由于“-08”不是有效的以 8 为基数的数字,因此解析失败,并返回 0。

来自MDN

基数

一个整数,表示上述字符串的基数。虽然此参数是可选的,但始终指定它以消除读者混淆并保证可预测的行为。当未指定基数时,不同的实现会产生不同的结果。


另请注意,您可以使用一元运算+符将这些字符串转换为数字:

​var str = '-08';
var num = +str;

console.log(num);​​​

//logs -8

演示

于 2012-12-13T21:20:18.647 回答
2

你也可以试试这个:

'-06' * 1 = -6
'-07' * 1 = -7
'-08' * 1 = -8
于 2012-12-13T21:22:55.407 回答
1

这是一个错误firefox,请改用。在此处parseFloat获取有关此错误的更多详细信息。

在这里检查parseFloat结果。

于 2012-12-13T21:24:23.670 回答