parseInt()和parseFloat()之间的行为差​​异

时间:2012-03-02 05:27:41

标签: javascript parsing

为什么parseInt()parseFloat()之间存在这种行为差异?

我有一个包含08的字符串。

当我写这段代码时:

alert(hfrom[0]);
alert(parseInt(hfrom[0]));
alert(parseFloat(hfrom[0]));

生成以下输出:

08
0
8

为什么parseIntparseFloat会在这种情况下返回两个不同的结果?

2 个答案:

答案 0 :(得分:10)

parseInt()根据字符串中的第一个字符假定您的号码的基数。如果它以0x开头,则假定为16(十六进制)。否则,如果它以0开头,则它假定为基数8(八进制)。否则它假定为10。

您可以将基数指定为第二个参数:

alert(parseInt(hfrom[0], 10)); // 8

来自MDN(上面链接):

  

如果radix未定义或为0,则JavaScript假定以下内容:

     

如果输入字符串以“0x”或“0X”开头,则radix为16   (十六进制)。如果输入字符串以“0”开头,则基数为8   (八进制)。此功能是非标准的,有些实现   故意不支持它(而是使用基数10)。为了这   当使用parseInt时,reason总是指定一个基数。如果是输入字符串   从任何其他值开始,基数为10(十进制)。

答案 1 :(得分:2)

你应该始终在parseInt() ex parseInt('013', 10)中包含基数参数,否则它可以将其转换为不同的数字基础:

parseInt('013') === 11
parseInt('013', 10) === 13
parseInt('0x13') === 19