我如何在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>