javascript“parseInt()”的问题

时间:2011-09-06 10:26:33

标签: javascript

  

可能重复:
  Workarounds for JavaScript parseInt octal bug
  How to parseInt a string with leading 0

document.write(parseInt("07"));

制作“7”

document.write(parseInt("08"));

产生“0”

这对我来说是个问题(抱歉这个唠叨,我必须或者我不能提交问题)。任何人都知道为什么它是愚蠢的或者是否有更好的功能?

5 个答案:

答案 0 :(得分:14)

如果参数以0开头,则它将被解析为八进制,而08不是有效的八进制数。提供第二个参数10,它指定基数 - 基数10。

document.write(parseInt("08", 10));

答案 1 :(得分:6)

使用此修改

parseInt("08",10);

parseInt(string, radix)

的规则

如果省略radix参数,则JavaScript假定以下内容:

  • 如果字符串以“0x”开头,则基数为16(十六进制)
  • 如果字符串以“0”开头,则基数为8(八进制)。不推荐使用此功能
  • 如果字符串以任何其他值开头,则基数为10(十进制)

答案 2 :(得分:2)

您希望parseInt('08', 10)告诉它解析为小数。

答案 3 :(得分:2)

您只是以错误的方式使用该函数的输入参数。查看this了解详情。基本上:

  

parseInt()函数解析一个字符串并返回一个整数。

     

radix参数用于指定要使用的数字系统   例如,使用16(十六进制)的基数表示   字符串中的数字应该从十六进制数解析为a   十进制数。

     

如果省略radix参数,则JavaScript假定以下内容:   如果字符串以“0x”开头,则基数为16(十六进制)   字符串以“0”开头,基数为8(八进制)。这个功能是   deprecated如果字符串以任何其他值开头,则基数为10   (十进制)

所以07和08解析为八进制。这就是为什么07是7和08是0(它四舍五入到最接近)

答案 4 :(得分:1)

试试这个:

parseInt('08', 10)

它将产生8