Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript trunc()函数_Javascript_Bit Manipulation_Bitwise Operators - Fatal编程技术网

javascript trunc()函数

javascript 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)

我想在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) == -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返回一个字符串