我有以下两个parseInt(),我不太清楚为什么他们给了我不同的结果:
alert(parseInt(0.00001))
显示0;
alert(parseInt(0.00000001))
显示1
我的猜测是,由于parseInt需要字符串参数,因此它将0.00001
视为""+0.00001
"0.00001"
,因此,第一个警报将在parseInt之后显示0
。对于第二个语句,""+0.00000001
将为"1e-8"
,其parseInt为1
。我是对的吗?
由于
答案 0 :(得分:8)
我相信你是对的。
parseInt(0.00001) == parseInt(String(0.00001)) == parseInt('0.00001') ==> 0
parseInt(0.00000001) == parseInt(String(0.00000001)) == parseInt('1e-8') ==> 1
答案 1 :(得分:0)
parseInt
获取它识别为数字的第一个参数(转换为字符串)中的每个字符,并且一旦找到非数字值,它就会忽略该值和字符串的其余部分。 (参见“描述”下的MDN第二段)
因此,parseInt(0.00000001)
=== parseInt(String(0.00000001))
=== parseInt("1e-8")
可能只会从字符串中提取1 parseInt("1")
=== {{1 }}
然而,还有另一种可能性:
来自Mozilla开发者网络: parseInt(string,radix);
表示字符串参数(强调添加):“要解析的值。如果字符串不是字符串,则将其转换为一个。字符串中的前导空格将被忽略。”
我认为这种可能性不太可能,因为String(0.00000001)不会产生NAN。
答案 2 :(得分:0)
你是对的。
parseInt旨在从字符串中获取数字。因此,如果您传递一个数字,它首先将其转换为字符串,然后再转换为数字。字符串转换后,parseInt从字符串中的第一个数字开始,并在第一个非数字相关字符处放弃。所以“1.e-8”变成“1”
如果你知道你是从一个字符串开始,并且只是想获得一个Integer值,你可以做类似的事情。
Math.round(Number('0.00000001')); // 0
如果您知道您有浮点数而不是字符串......
Math.round(0.00000001); // 0
您还可以截断,ceil()或将数字置于