问题描述
为什么 parseInt()
和 parseFloat()
?
我的字符串中包含 08
。
当我写这篇文章时代码:
When I write this code:
alert(hfrom[0]);
alert(parseInt(hfrom[0]));
alert(parseFloat(hfrom[0]));
生成以下输出:
08
0
8
为什么 parseInt
和 parseFloat
在这种情况下返回两个不同的结果?
Why does parseInt
and parseFloat
return two different results in this case?
推荐答案
parseInt()根据字符串中的第一个字符假定您的号码的基数。如果它以 0x
开头,则假定为16(十六进制)。否则,如果它以 0
开头,则假定为8(八进制)。否则它假设基数为10。
parseInt() assumes the base of your number according to the first characters in the string. If it begins with 0x
it assumes base 16 (hexadecimal). Otherwise, if it begins with 0
it assumes base 8 (octal). Otherwise it assumes base 10.
您可以将基数指定为第二个参数:
You can specify the base as a second argument:
alert(parseInt(hfrom[0], 10)); // 8
来自MDN(上面链接):
From MDN (linked above):
如果输入字符串以0x或0X开头,基数是16
(十六进制)。如果输入字符串以0开头,则基数为8
(八进制)。这个功能是非标准的,有些实现
故意不支持它(而是使用基数10)。对于这个
的原因,在使用parseInt时总是指定一个基数。如果输入字符串
以任何其他值开头,则基数为10(十进制)。
If the input string begins with "0x" or "0X", radix is 16 (hexadecimal). If the input string begins with "0", radix is eight (octal). This feature is non-standard, and some implementations deliberately do not support it (instead using the radix 10). For this reason always specify a radix when using parseInt. If the input string begins with any other value, the radix is 10 (decimal).
这篇关于parseInt()和parseFloat()之间的行为差异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!