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

当我运行它时,t92出于某种原因。如果我删除前导 0,那么它工作得很好。为什么会这样?

4

4 回答 4

1

尝试这个:

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

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

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

在此处输入图像描述

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

参考:ECMAScript 语言规范第 104 页

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

于 2013-04-30T02:35:38.253 回答
1

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

于 2013-04-30T02:36:59.760 回答
1

parseInt如果您有前导零,则假定八进制表示法,因此您希望传入 aradix作为第二个参数,告诉函数将字符串解析为以 10 为底的 int。

parseInt(avar, 10) 

应该修复它。

于 2013-04-30T02:37:30.263 回答
1

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

t = parseInt(avar, 10);

指定应以 10 为基数解析数字。

来自 MDN 文档:

如果 radix 未定义或为 0(或不存在),JavaScript 假定如下:

  • 如果输入字符串以“0x”或“0X”开头,则基数为 16(十六进制)并解析字符串的其余部分。
  • 如果输入字符串以“0”开头,则基数为 8(八进制)或 10(十进制)。确切选择哪个基数取决于实现。ECMAScript 5 指定使用 10(十进制),但并非所有浏览器都支持这一点。由于这个原因,在使用 parseInt 时总是指定一个基数。
  • 如果输入字符串以任何其他值开头,则基数为 10(十进制)。

并参考 ECMAScript 5:

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

参考:

于 2013-04-30T02:35:20.130 回答