Javascript评估数字以零作为小数开始

时间:2015-10-15 15:49:48

标签: javascript parsing

我想用零作为十进制数来评估数字开头。

例如,让我们定义 convertToDec

convertToDec(010) => 10 
convertToDec(0010) => 10
convertToDec(0123) => 123

等..

因为所有js数字都以0开头在基数8中进行评估,所以我试着这样做:

function convertToDec(num){
    return parseInt(num.toString(), 10);
}

toString 功能会解析基数为8的数字。

有什么建议吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

如果你字面上在JavaScript中编写0010,那么它将被视为八进制数。这就是解析器的工作原理。

来自MDN's docs

  • 十进制整数文字由一系列数字组成,不带前导0(零)。
  • 整数文字的前导0(零)表示它是八进制的。八进制整数只能包含数字0-7。
  • 前导0x(或0X)表示十六进制。十六进制整数可以包括数字(0-9)和字母a-f和A-F。
  • 前导0b(或0B)表示二进制。二进制整数可以包括仅0和1的数字。

因此,当您编写convertToDec(0010)时,您的浏览器会将其解释为convertToDec(8)。由于您使用了“八进制文字”,因此已经已“转换”为8

如果您想要文字"0010",那么您需要使用字符串。

parseInt("0010", 10); // 10

答案 1 :(得分:2)

您需要使用字符串参数调用convertToDec,而不是数字。

function convertToDec(num){
    return parseInt(num, 10);
}
alert(convertToDec("010"));

如果你给它一个数字作为参数,那么这个数字已经被Javascript解释器解析了,该函数无法取回你最初输入的内容。 JS解释器将以0开头的数字解析为八进制。