如何在JavaScript中四舍五入一个数字?
Math.round()不起作用,因为它舍入到最接近的小数。
我不确定是否有更好的方法,而不是在小数点处分开,保留第一位。一定有……
如何在JavaScript中四舍五入一个数字?
Math.round()不起作用,因为它舍入到最接近的小数。
我不确定是否有更好的方法,而不是在小数点处分开,保留第一位。一定有……
当前回答
你需要用-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>
其他回答
要四舍五入到负无穷,可以使用:
rounded=Math.floor(number);
要四舍五入到零(如果数字可以四舍五入到-2147483648和2147483647之间的32位整数),使用:
rounded=number|0;
要四舍五入到零(对于任何数字),使用:
if(number>0)rounded=Math.floor(number);else rounded=Math.ceil(number);
使用Math.floor()是做到这一点的一种方法。
更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor
朝向负无穷- Math.floor()
+3.5 => +3.0
-3.5 => -4.0
可以使用Math.trunc()向零舍入。旧的浏览器不支持此功能。如果需要支持这些,可以使用Math.ceil()表示负数,使用Math.floor()表示正数。
+3.5 => +3.0 using Math.floor()
-3.5 => -3.0 using Math.ceil()
Math.floor()可以工作,但与使用按位或操作相比,它非常慢:
var rounded = 34.923 | 0;
alert( rounded );
//alerts "34"
EDIT Math.floor()并不比使用|操作符慢。感谢Jason S检查我的工作。
下面是我用来测试的代码:
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 round(value, decimals) {
return Number(Math.floor(parseFloat(value + 'e' + decimals)) + 'e-' + decimals);
}
来源:Jack L Moore的博客