函数parseInt(1/10000000)返回1.为什么?

时间:2014-12-25 20:16:59

标签: javascript ecmascript-5

parseInt(1/10000000)结果为1时,为什么parseInt(1/1000000)结果为0

我需要像int i = -1/10000000;那样模拟Java的int cast,这是0

我应该将Math.floor用于肯定而Math.ceil用于否定吗?还是有另一种解决方案吗?

2 个答案:

答案 0 :(得分:10)

起初问题似乎很有趣。然后我看了1/10000000是什么。

< 1/10000000
> 1e-7

因此:

< parseInt("1e-7"); // note `parseInt` takes a STRING argument
> 1

如果要截断为整数,可以执行以下操作:

function truncateToInteger(real) {
    return real - (real % 1);
}

答案 1 :(得分:6)

parseInt期望解析字符串参数,因此首先将其转换为字符串。

1/1000000转换为字符串"0.000001"时,parseInt会忽略&#34;中的所有内容。&#34;以后,因为它仅用于整数,所以它将其读作0

1/10000000非常小,将其转换为字符串时使用科学记数法"1e-7",然后parseInt忽略来自&#34; e&#34;以后,因为它仅用于整数,所以它将其读作1

基本上,parseInt不是你应该做的。

要将数字转换为整数,或将其转换为0,因为JavaScript中的任何按位操作都会将数字强制为32位int,而ORing为0并不会将值更改为超出该值:

>(-1/10000000)|0
0

>1234.56|0 // truncation
1234

>(2147483647+1)|0 // integer overflow
-2147483648