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

tim*_*hew 5 javascript ecmascript-5

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

我需要一些模拟Java的int铸造,比如int i = -1/10000000;,哪个是0.

我应该Math.floor用于积极和Math.ceil消极吗?还是有其他解决方案吗?

Nie*_*sol 10

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

< 1/10000000
> 1e-7
Run Code Online (Sandbox Code Playgroud)

因此:

< parseInt("1e-7"); // note `parseInt` takes a STRING argument
> 1
Run Code Online (Sandbox Code Playgroud)

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

function truncateToInteger(real) {
    return real - (real % 1);
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,更有趣的是`parseInt(1/1000001)`是9. :) (5认同)

Boa*_*ann 6

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

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

1/10000000如此小,将它转换为字符串使用科学记数法"1e-7",parseInt然后忽略从"e"开始的所有内容,因为它仅用于整数,因此它将其读作1.

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

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

>(-1/10000000)|0
0

>1234.56|0 // truncation
1234

>(2147483647+1)|0 // integer overflow
-2147483648
Run Code Online (Sandbox Code Playgroud)