如何在Javascript中舍入一个数字?

cyb*_*fly 156 javascript rounding

我想使用Javascript来舍入一个数字.由于这个数字是货币,我希望它像这些例子一样向上舍入(2个小数点):

  • 192.168 => 192.20
  • 192.11 => 192.20
  • 192.21 => 192.30
  • 192.26 => 192.30
  • 192.20 => 192.20

如何使用Javascript实现这一目标?内置的Javascript函数将根据标准逻辑(小于和大于5)向上舍入数字.

And*_*all 298

/**
 * @param num The number to round
 * @param precision The number of decimal places to preserve
 */
function roundUp(num, precision) {
  precision = Math.pow(10, precision)
  return Math.ceil(num * precision) / precision
}

roundUp(192.168, 1) //=> 192.2
Run Code Online (Sandbox Code Playgroud)

  • @codecowboy如果你不这样做,那么`ceil()`会给你`193`,所以我们必须确保我们要保留的所有精度都在小数点之前.然后我们进行逆操作以恢复"原始"值. (5认同)
  • 对于那些想知道如何舍入到最近的整数的人,你只需要Math.ceil().其余的只是处理小数.为了拯救他人,我的大脑需要花时间去做! (4认同)
  • @AndrewMarshall乘法的目的是什么,然后除以10? (2认同)
  • 如果你得到像“192.19999999999997”这样的数字,你可以将“.toFixed(1)”应用于“num” (2认同)

sur*_*ran 26

稍晚但是,可以为此创建一个可重用的javascript函数:

// Arguments: number to round, number of decimal places
function roundNumber(rnum, rlength) { 
    var newnumber = Math.round(rnum * Math.pow(10, rlength)) / Math.pow(10, rlength);
    return newnumber;
}
Run Code Online (Sandbox Code Playgroud)

将该功能称为

alert(roundNumber(192.168,2));
Run Code Online (Sandbox Code Playgroud)

  • 这很好用,但是OP询问如何对数字进行舍入,所以Math.ceil应该在这里使用而不是Math.round. (2认同)

Sha*_*had 20

正常舍入将适用于小调整:

Math.round(price * 10)/10
Run Code Online (Sandbox Code Playgroud)

如果要保留货币格式,可以使用Number方法 .toFixed()

(Math.round(price * 10)/10).toFixed(2)
Run Code Online (Sandbox Code Playgroud)

虽然这会使它成为一个String =)

  • OP 询问如何对数字进行四舍五入,因此此处应使用 Math.ceil 而不是 Math.round。 (2认同)

Hoà*_*ong 9

非常接近TheEye的答案,但我改变了一点让它工作:

var num = 192.16;
    
console.log(    Math.ceil(num * 10) / 10    );
Run Code Online (Sandbox Code Playgroud)