我如何在Javascript中舍入一个数字?

我怎样才能在JavaScript中舍入数字?

math.round()不起作用,因为它将其四舍五入到最接近的小数。

我不确定是否有一个更好的方法来做这件事,而不是在保留第一位的小数点处分开。 必须有…

 Math.floor() 

是答案。

向负无穷的一轮 – Math.floor()

 +3.5 => +3.0 -3.5 => -4.0 

通常称为Truncate() ,但不受JavaScript支持的Round向零 – 可以通过Math.ceil()用于负数, Math.floor()用于正数来模拟。

 +3.5 => +3.0 using Math.floor() -3.5 => -3.0 using Math.ceil() 

Math.floor()可以工作,但与使用按位OR操作相比,它非常慢:

 var rounded = 34.923 | 0; alert( rounded ); //alerts "34" 

编辑 Math.floor() 不会比使用|慢 运营商。 感谢Jason S检查我的工作。

这是我用来testing的代码:

 var a = []; var time = new Date().getTime(); for( i = 0; i < 100000; i++ ) { //a.push( Math.random() * 100000 | 0 ); a.push( Math.floor( Math.random() * 100000 ) ); } var elapsed = new Date().getTime() - time; alert( "elapsed time: " + elapsed ); 

如果需要舍入到特定的小数位数,可以尝试使用此函数

 function roundDown(number, decimals) { decimals = decimals || 0; return ( Math.floor( number * Math.pow(10, decimals) ) / Math.pow(10, decimals) ); } 

例子

 alert(roundDown(999.999999)); // 999 alert(roundDown(999.999999, 3)); // 999.999 alert(roundDown(999.999999, -1)); // 990 

为了向负面的无限下降,使用:

 rounded=Math.floor(number); 

要向下舍入到零(如果数字可以舍入到-2147483648和2147483647之间的32位整数),请使用:

 rounded=number|0; 

要向下舍入为零(对于任何数字),请使用:

 if(number>0)rounded=Math.floor(number);else rounded=Math.ceil(number); 

number舍入为0可以通过减去其有符号的小数部分number % 1

 rounded = number - number % 1; 

Math.floor (往-Infinity四舍五入)这个方法是非常准确的。

虽然在处理-0+Infinity-Infinity存在差异:

 Math.floor(-0) => -0 -0 - -0 % 1 => +0 Math.floor(Infinity) => Infinity Infinity - Infinity % 1 => NaN Math.floor(-Infinity) => -Infinity -Infinity - -Infinity % 1 => NaN 
 Math.floor(1+7/8) 

今天围绕着一个别人的密码,发现下面这个似乎也是一样的:

 var dec = 12.3453465, int = dec >> 0; // returns 12 

有关Sign-propagating右移(>>)的更多信息,请参阅MDN按位运算符

我花了一段时间才弄清楚这是干什么的

但是,正如上面强调的,Math.floor()的作品,看起来更可读在我看来。

您需要将-1减半,然后再乘以-1,就像下面的例子一样。

 <script type="text/javascript"> function roundNumber(number, precision, isDown) { var factor = Math.pow(10, precision); var tempNumber = number * factor; var roundedTempNumber = 0; if (isDown) { tempNumber = -tempNumber; roundedTempNumber = Math.round(tempNumber) * -1; } else { roundedTempNumber = Math.round(tempNumber); } return roundedTempNumber / factor; } </script> <div class="col-sm-12"> <p>Round number 1.25 down: <script>document.write(roundNumber(1.25, 1, true));</script> </p> <p>Round number 1.25 up: <script>document.write(roundNumber(1.25, 1, false));</script></p> </div>