如何从JavaScript数字中删除小数部分?

我有分部的结果,我希望丢弃结果数字的小数部分。

我怎样才能做到这一点?


你可以使用...

  • Math.trunc() (截断小数部分,也见下文)
  • Math.floor() (向下舍入)
  • Math.ceil() (向上舍入)
  • Math.round() (舍入到最接近的整数)
  • ...取决于你想如何去除小数。

    所有平台(即IE)都不支持Math.trunc() ,但在此期间可以轻松使用polyfill。

    通过使用按位运算符(.eg |0 ),以极好的平台支持截断小数部分的另一种方法是使用按位运算符(.eg |0 )。 在数字上使用按位运算符的副作用是将其操作数视为有符号的32位整数,因此会删除小数部分。 请记住,这也会破坏大于32位的数字。


    你也可能在谈论用浮点算法进行小数舍入的不准确性。

    必读 - 每位计算机科学家应了解的浮点运算。


    你也可以做

    parseInt(a/b)
    

    您也可以使用按位运算符来截断小数。

    例如

    var x = 9 / 2;
    console.log(x); // 4.5
    
    x = ~~x;
    console.log(x); // 4
    
    x = -3.7
    console.log(~~x) // -3
    console.log(x | 0) // -3
    console.log(x << 0) // -3
    

    按位运算比数学函数效率更高。 double不按位运算符似乎也稍微超过了x | 0 x | 0x << 0按位操作的数量可以忽略不计。

    // 952 milliseconds
    for (var i = 0; i < 1000000; i++) {
        (i * 0.5) | 0;
    }
    
    // 1150 milliseconds
    for (var i = 0; i < 1000000; i++) {
        (i * 0.5) << 0;
    }
    
    // 1284 milliseconds
    for (var i = 0; i < 1000000; i++) {
        Math.trunc(i * 0.5);
    }
    
    // 939 milliseconds
    for (var i = 0; i < 1000000; i++) {
        ~~(i * 0.5);
    }
    

    另外值得注意的是,按位不运算符优先于算术运算,因此您可能需要用圆括号括起计算以获得预期的结果:

    x = -3.7
    
    console.log(~~x * 2) // -6
    console.log(x * 2 | 0) // -7
    console.log(x * 2 << 0) // -7
    
    console.log(~~(x * 2)) // -7
    console.log(x * 2 | 0) // -7
    console.log(x * 2 << 0) // -7
    

    有关双位非运算符的更多信息可以在双位NOT(~~)中找到。

    链接地址: http://www.djcxy.com/p/77449.html

    上一篇: How can I remove the decimal part from JavaScript number?

    下一篇: New to Javascript