x | 0如何在JavaScript中添加数字?

时间:2012-01-28 23:53:02

标签: javascript numbers integer floor

在我之前提出的问题的答案中 (What is the fastest way to generate a random integer in javascript?),我想知道一个数字如何通过符号|丢失其小数

例如:

var x = 5.12042;
x = x|0;

如何将数字设置为5

更多例子:

console.log( 104.249834 | 0 ); //104
console.log( 9.999999 | 0 );   // 9

3 个答案:

答案 0 :(得分:13)

因为根据ECMAScript规范,位运算符运算符在每个要计算的表达式上调用ToInt32

请参阅11.10 Binary Bitwise Operators

  

生产A : A @B,其中@是其中一个按位运算符   上述作品评估如下:

     
      
  1. 评估A

  2.   
  3. 致电GetValue(Result(1))

  4.   
  5. 评估B

  6.   
  7. 致电GetValue(Result(3))

  8.   
  9. 致电ToInt32(Result(2)).

  10.   
  11. 致电ToInt32(Result(4)).

  12.   
  13. 将按位运算符@应用于Result(5)Result(6)结果是带符号的32位整数

  14.   
  15. 返回Result(7)

  16.   

答案 1 :(得分:5)

按位运算符将其参数转换为整数(请参阅http://es5.github.com/#x9.5)。 大多数语言我知道不支持这种转换:

    $ python -c "1.0|0"
    Traceback (most recent call last):
      File "", line 1, in 
    TypeError: unsupported operand type(s) for |: 'float' and 'int'

    $ ruby -e '1.0|0'
    -e:1:in `': undefined method `|' for 1.0:Float (NoMethodError)

    $ echo "int main(){1.0|0;}" | gcc -xc -
    : In function ‘main’:
    :1: error: invalid operands to binary | (have ‘double’ and ‘int’)

答案 2 :(得分:2)

在执行floor时,尽管可以将参数转换为整数,但这并不是大多数语言所能做的,因为原始类型是浮点数。

在保留数据类型的同时更好的方法是将exponent数字转到mantissa并将剩余的数字归零。

如果您有兴趣,可以查看IEEE spec的浮点数。