当parseInt(1/10000000)
结果为1
时,为什么parseInt(1/1000000)
结果为0
?
我需要像int i = -1/10000000;
那样模拟Java的int cast,这是0
。
我应该将Math.floor
用于肯定而Math.ceil
用于否定吗?还是有另一种解决方案吗?
答案 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