如何在 JavaScript 中舍入一个数字?
math.round()
不起作用,因为它会将其四舍五入到最接近的小数。
我不确定是否有更好的方法来做到这一点,而不是在小数点处将其分开以保留第一位。必须有...
如何在 JavaScript 中舍入一个数字?
math.round()
不起作用,因为它会将其四舍五入到最接近的小数。
我不确定是否有更好的方法来做到这一点,而不是在小数点处将其分开以保留第一位。必须有...
使用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()
会工作,但与使用按位OR
运算相比它非常慢:
var rounded = 34.923 | 0;
alert( rounded );
//alerts "34"
编辑 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 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
可以通过减去其带符号的小数部分来实现number
对a 的舍入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