math 我如何在Javascript中舍入数字?





4 Answers

向负无穷圆 - Math.floor()

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

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

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

我如何在JavaScript中舍入数字?

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

我不确定是否有更好的方法去做,而不是在保留第一位时在小数点处分开。 必须有...




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

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舍入为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



今天围绕着一些elses代码摆弄,发现以下几点似乎也在下降:

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

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

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

但正如上面强调的,Math.floor()的工作原理,在我看来看起来更具可读性。




Related