2015-10-15 35 views
3

我想评估一个十进制数字以零开头。Javascript评估号以0开头为十进制

例如,让我们定义convertToDec

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

等。

因为所有的JS数字与0基地8进行评估开始,我试图做这样的:

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

但是toS tring函数解析基数为8的数字。

有什么建议吗?

谢谢!

回答

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 
2

您需要使用字符串参数而不是数字来呼叫convertToDec

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

如果你给它一个号作为参数,数量已经由JavaScript解释器解析,该功能无法取回您最初键入的内容。 JS解释器将从0开始的数字解析为八进制数。