avar = "0000013482000000";
t = parseInt(avar);
当我运行它时,t
是92
出于某种原因。如果我删除前导 0,那么它工作得很好。为什么会这样?
avar = "0000013482000000";
t = parseInt(avar);
当我运行它时,t
是92
出于某种原因。如果我删除前导 0,那么它工作得很好。为什么会这样?
尝试这个:
avar = "0000013482000000";
t = parseInt(avar,10);
如果字符串以 . 开头,某些浏览器可能会认为它是八进制数0
。
但是,在具有新 ECMAScript 标准的现代浏览器中不需要,因为除非指定或以(十六进制),10
开头,否则它们将始终被视为十进制。0x
Chrome 是默认基数为 10 的浏览器之一。
参考:ECMAScript 语言规范第 104 页
该
parseInt
函数根据指定的基数生成一个整数值,该整数值由字符串参数的内容的解释决定。字符串中的前导空格被忽略。如果基数未定义或为 0,则假定为 10,除非数字以字符对 0x 或 0X 开头,在这种情况下假定基数为 16。如果 radix 为 16,则该数字也可以选择以字符对 0x 或 0X 开头。
解析带有前导零的数字会导致该数字被视为八进制。要覆盖它,您需要将 radix 参数设置parseInt
为 10(以 10 为底,而不是以 8 为底)。
parseInt
如果您有前导零,则假定八进制表示法,因此您希望传入 aradix
作为第二个参数,告诉函数将字符串解析为以 10 为底的 int。
parseInt(avar, 10)
应该修复它。
使用第二个参数(基数):
t = parseInt(avar, 10);
指定应以 10 为基数解析数字。
来自 MDN 文档:
如果 radix 未定义或为 0(或不存在),JavaScript 假定如下:
并参考 ECMAScript 5:
parseInt 函数根据指定的基数生成一个整数值,该整数值由对字符串参数的内容的解释决定。字符串中的前导空格被忽略。如果基数未定义或为 0,则假定为 10,除非数字以字符对 0x 或 0X 开头,在这种情况下假定基数为 16。如果 radix 为 16,则 number 也可以选择以字符对 0x 或 0X 开头。
参考: