javascript trunc()函数
我想在javascript中截断一个数字,这意味着要删除小数部分: trunc(2.6)==2 trunc(-2.6)==-2javascript trunc()函数,javascript,bit-manipulation,bitwise-operators,Javascript,Bit Manipulation,Bitwise Operators,我想在javascript中截断一个数字,这意味着要删除小数部分: trunc(2.6)==2 trunc(-2.6)==-2 经过严格的基准测试后,我的答案是: function trunc (n) { return ~~n; } // or function trunc1 (n) { return n | 0; } 对于正数: Math.floor(2.6) == 2; Math.ceil(-2.6) == -2; truncate(-3.25)
经过严格的基准测试后,我的答案是:
function trunc (n) {
return ~~n;
}
// or
function trunc1 (n) {
return n | 0;
}
对于正数:
Math.floor(2.6) == 2;
Math.ceil(-2.6) == -2;
truncate(-3.25) == -3;
truncate(3.25) == 3;
对于负数:
Math.floor(2.6) == 2;
Math.ceil(-2.6) == -2;
truncate(-3.25) == -3;
truncate(3.25) == 3;
作为对的答案的补充,如果要始终朝零截断,可以:
function truncate(n) {
return n | 0; // bitwise operators convert operands to 32-bit integers
}
或:
无论是正数还是负数,这两种方法都能为您提供正确的结果:
Math.floor(2.6) == 2;
Math.ceil(-2.6) == -2;
truncate(-3.25) == -3;
truncate(3.25) == 3;
您可以使用还允许指定要显示的十进制数的方法:
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
我用
因为它在整个浮动范围内工作,并且(未测量)应比
function trunc(n) {
return Math[n > 0 ? "floor" : "ceil"](n);
}
如果以前没有,也没有其他偶然发现此线程的人可以使用,现在只需使用数学库中的trunc()函数,如下所示:
let x = -201;
x /= 10;
console.log(x);
console.log(Math.trunc(x));
>>> -20.1
>>> -20
请注意,按位方法(例如,~~n或n | 0)仅适用于2^31-1或2147483647以下的数字。2147483648或更高版本将返回不正确的结果;例如,2147483647 | 0返回-2147483648,4294967295 | 0返回-1,这几乎肯定不是您想要的!您的方式只会稍微快一点,但要紧凑得多,这也会影响性能。更好的是,我不必使用函数调用,我只需嵌入(n-n%1)内联!我一直在使用(n | 0),但这只适用于32位以下的数字,而不是完整的64位浮点范围。从现在起我将使用这个,谢谢!舍入意味着它不是截断的。还要注意,toFixed返回一个字符串