如何在JavaScript中四舍五入一个数字?

Math.round()不起作用,因为它舍入到最接近的小数。

我不确定是否有更好的方法,而不是在小数点处分开,保留第一位。一定有……


当前回答

将一个数字舍入到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

其他回答

Math.round(3.14159 * 100) / 100  // 3.14

3.14159.toFixed(2);              // 3.14 returns a string
parseFloat(3.14159.toFixed(2));  // 3.14 returns a number

Math.round(3.14159)  // 3
Math.round(3.5)      // 4
Math.floor(3.8)      // 3
Math.ceil(3.2)       // 4

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

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

使用Math.floor()是做到这一点的一种方法。

更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor

今天摆弄别人的代码,发现下面的似乎也round down:

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

有关符号传播右移(>>)的更多信息,请参阅MDN位操作符

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

但正如上面强调的那样,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>