为什么parseInt不会在前导0的大数字上工作?

时间:2013-04-30 02:34:29

标签: javascript parseint

avar = "0000013482000000";
t = parseInt(avar);

当我运行时,由于某种原因t92。如果我删除前导0,那么它的工作正常。为什么会这样?

4 个答案:

答案 0 :(得分:1)

使用第二个参数(基数):

t = parseInt(avar, 10);

指定应在基数10中解析数字。

来自MDN文档:

如果radix未定义或0(或不存在),则JavaScript假定以下内容:

  • 如果输入字符串以“0x”或“0X”开头,则基数为16(十六进制),并解析字符串的其余部分。
  • 如果输入字符串以“0”开头,则基数为八(八进制)或十进制(十进制)。究竟选择哪个基数是依赖于实现的。 ECMAScript 5指定使用10(十进制),但并非所有浏览器都支持此功能。因此,在使用parseInt时始终指定基数。
  • 如果输入字符串以任何其他值开头,则基数为10(十进制)。

参考ECMAScript 5:

  

parseInt函数根据指定的基数,通过解释字符串参数的内容来生成一个整数值。字符串中的前导空格被忽略。如果radix未定义或为0,则假定为10,除非数字以字符对0x或0X开头,在这种情况下假设基数为16。如果radix为16,则number也可以选择以字符对0x或0X开头。

参考:

答案 1 :(得分:1)

试试这个:

avar = "0000013482000000";
t = parseInt(avar,10);

如果字符串以0开头,某些浏览器可能会认为它是八进制数。

但是,在具有新ECMAScript标准的现代浏览器中不需要,10,因为除非指定或以0x(十六进制)开头,否则它们将始终被视为十进制。

enter image description here

Chrome是默认基数为10的浏览器之一。

参考:ECMAScript Language Specification Page 104

  

parseInt函数产生一个整数值,该值由字符串内容的解释决定   参数根据指定的基数。字符串中的前导空格被忽略。如果基数未定义或0,   它被假定为10,除非数字以字符对0x或0X开头,在这种情况下是基数   假设为16。如果radix为16,则该数字也可以选择以字符对0x或0X开头。

答案 2 :(得分:1)

使用前导零解析数字会导致数字被视为八进制。要覆盖它,您需要将parseInt的基数参数设置为10(基数为10而不是基数为8)。

答案 3 :(得分:1)

如果你有一个前导零,

parseInt假定八进制表示法,所以你想传入radix作为第二个参数,告诉函数将字符串解析为基数10 int。

parseInt(avar, 10) 

应该修复它。

相关问题