传递浮点数时的javascript,parseInt行为

时间:2014-04-19 20:49:32

标签: javascript parseint

我有以下两个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。我是对的吗?

由于

3 个答案:

答案 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()或将数字置于