在我之前的问题的已接受答案中 (在javascript中生成随机整数的最快方法是什么?),我想知道数字如何通过符号
|
失去小数位
.
例如:
var x = 5.12042;
x = x|0;
如何将数字增加到
5
?
更多示例:
console.log( 104.249834 | 0 ); //104
console.log( 9.999999 | 0 ); // 9
因为,根据 ECMAScript 规范,按位运算符对每个要计算的表达式调用
ToInt32
。
参见 11.10 二元按位运算符:
产生式
,其中A : A @B
是按位运算符之一 以上作品,评价如下:@
评估
。A
致电
。GetValue(Result(1))
评估
。B
致电
。GetValue(Result(3))
致电
ToInt32(Result(2)).
致电
ToInt32(Result(4)).
将按位运算符
应用于@
和Result(5)
。 结果是一个有符号的 32 位整数。Result(6)
返回
。Result(7)
按位运算符将其参数转换为整数(请参阅http://es5.github.com/#x9.5)。 大多数语言我知道不支持这种类型的转换:
$ python -c "1.0|0" 回溯(最近一次调用最后一次): 文件“”,第 1 行,位于 类型错误:| 不支持的操作数类型:“float”和“int” $ ruby -e '1.0|0' -e:1:在`'中:未定义的方法`|'对于 1.0:浮动(无方法错误) $ echo "int main(){1.0|0;}" |海湾合作委员会-xc- :在函数“main”中: :1: 错误:二进制操作数无效 | (有“double”和“int”)
在执行
floor
时,虽然可以将参数转换为整数,但这不是大多数语言会做的,因为原始类型是浮点数。
在保留数据类型的同时,更好的方法是将
exponent
数字放入 mantissa
并将剩余位归零。
如果您有兴趣,可以查看浮点数的IEEE规范。