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

Javascript 函数parseInt(1/10000000)返回1。为什么?,javascript,ecmascript-5,Javascript,Ecmascript 5,为什么parseInt(1/10000000)结果1,而parseInt(1/1000000)结果是0 我需要一些类似于Java的int转换的东西,比如inti=-1/10000000,即0 我应该用Math.floor表示肯定,用Math.ceil表示否定吗?还是有其他解决办法?起初,这个问题似乎很有趣。然后我看了一下1/10000000是什么 < 1/10000000 > 1e-7 parseInt需要解析字符串参数,因此首先将其转换为字符串 1/1000000当转换为字符串为

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

我需要一些类似于Java的int转换的东西,比如
inti=-1/10000000,即
0


我应该用
Math.floor
表示肯定,用
Math.ceil
表示否定吗?还是有其他解决办法?

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

< 1/10000000
> 1e-7

parseInt需要解析字符串参数,因此首先将其转换为字符串

1/1000000
当转换为字符串为
“0.000001”
时,parseInt将忽略从“.”开始的所有内容,因为它仅用于整数,所以它将其读取为
0

1/10000000
非常小,因此将其转换为字符串时使用科学符号
“1e-7”
,parseInt然后忽略从“e”开始的所有内容,因为它仅用于整数,所以它将其读取为
1

基本上,parseInt不是您应该做的

将数字转换为整数,或将其转换为0,因为JavaScript中的任何逐位操作都会将数字强制转换为32位int,并且使用0进行ORing不会改变超出该值的值:

>(-1/10000000)|0
0

>1234.56|0 // truncation
1234

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

raddix参数呢?它产生相同的结果?因为1/10000000返回1e-7,而1/1000000返回0.000001。parseInt的实际工作方式不同…@TimVermaelen相同的结果。这是因为结果是一个浮点而不是int。parseFloat(1/10000000)~1e-7是的,更有趣的是
parseInt(1/1000001)
is 9.)这里有点“inb4”注释,但是
返回real>>0
也可以很好地工作,它仅限于32位数字,而
返回实数-(实数%1)
支持任何浮点。另外有趣的是,
parseInt
做的第一件事是在第一个参数()上调用
toString
,而
parseFloat
toFixed
toPrecision
不支持。解析1/10000000返回浮点。。。不是int.parseFloat(1/10000000)可以很好地工作。AFAIK,x | 0也是asm.js中整数的类型提示。只是一个有趣的事实。
function truncateToInteger(real) {
    return real - (real % 1);
}
>(-1/10000000)|0
0

>1234.56|0 // truncation
1234

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