如何在JavaScript中四舍五入一个数字?
Math.round()不起作用,因为它舍入到最接近的小数。
我不确定是否有更好的方法,而不是在小数点处分开,保留第一位。一定有……
如何在JavaScript中四舍五入一个数字?
Math.round()不起作用,因为它舍入到最接近的小数。
我不确定是否有更好的方法,而不是在小数点处分开,保留第一位。一定有……
当前回答
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 );
其他回答
Math.floor(1+7/8)
使用Math.floor()是做到这一点的一种方法。
更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor
将一个数字舍入到0(又名“截断其小数部分”)可以通过减去其带符号的小数部分数字% 1来完成:
rounded = number - number % 1;
喜欢数学。floor(四舍五入到-∞)这个方法是完全准确的。
-0, +∞和-∞的处理是不同的:
Math.floor(-0) => -0
-0 - -0 % 1 => +0
Math.floor(Infinity) => Infinity
Infinity - Infinity % 1 => NaN
Math.floor(-Infinity) => -Infinity
-Infinity - -Infinity % 1 => NaN
如果需要四舍五入到特定的小数点后数位,可以尝试使用此函数
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
这是我发现的最可靠的解决方案。
function round(value, decimals) {
return Number(Math.floor(parseFloat(value + 'e' + decimals)) + 'e-' + decimals);
}
来源:Jack L Moore的博客