20

我想在javascript中截断一个数字,这意味着去掉小数部分:

截断 ( 2.6 ) == 2

截断 (-2.6 ) == -2


经过大量基准测试后,我的答案是:

 function trunc (n) {
    return ~~n;
 }
 
 // or  

 function trunc1 (n) {
    return n | 0;
 }
4

5 回答 5

34

作为@Daniel答案的补充,如果您想始终截断为零,您可以:

function truncate(n) {
  return n | 0; // bitwise operators convert operands to 32-bit integers
}

或者:

function truncate(n) {
  return Math[n > 0 ? "floor" : "ceil"](n);
}

两者都将为您提供正数和负数的正确结果:

truncate(-3.25) == -3;
truncate(3.25) == 3;
于 2010-01-24T04:41:58.220 回答
13

对于正数:

Math.floor(2.6) == 2;

对于负数:

Math.ceil(-2.6) == -2;
于 2010-01-24T02:52:18.817 回答
10

您可以使用toFixed方法,该方法还允许指定要显示的十进制数:

var num1 = new Number(3.141592);
var num2 = num1.toFixed(); // 3
var num3 = num1.toFixed(2); // 3.14
var num4 = num1.toFixed(10); // 3.1415920000

请注意toFixed将数字四舍五入:

var num1 = new Number(3.641592);
var num2 = num1.toFixed(); // 4
于 2011-10-10T19:35:46.570 回答
4

我用

function trunc(n){
   return n - n % 1;
}

因为它可以在整个浮动范围内工作并且应该(未测量)比

function trunc(n) {
  return Math[n > 0 ? "floor" : "ceil"](n);
}
于 2012-07-02T09:24:40.167 回答
0

万一之前和其他偶然发现此线程的人不可用,您现在可以简单地使用数学库中的 trunc() 函数,如下所示:

let x = -201;
x /= 10;
console.log(x);
console.log(Math.trunc(x));

>>> -20.1
>>> -20
于 2020-02-22T06:50:07.420 回答