我想使用 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 进行四舍五入)。
我想使用 Javascript 来四舍五入一个数字。由于数字是货币,我希望它像这些示例中那样四舍五入(2 个小数点):
如何使用 Javascript 实现这一目标?内置的 Javascript 函数将根据标准逻辑对数字进行四舍五入(小于和大于 5 进行四舍五入)。
/**
* @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
有点晚了,但是可以为此创建一个可重用的 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;
}
调用函数为
alert(roundNumber(192.168,2));
正常四舍五入只需稍作调整即可:
Math.round(price * 10)/10
如果要保留货币格式,可以使用 Number 方法 .toFixed()
(Math.round(price * 10)/10).toFixed(2)
虽然这将使它成为一个字符串 =)
非常接近TheEye 的答案,但我更改了一些小东西以使其工作:
var num = 192.16;
console.log( Math.ceil(num * 10) / 10 );
OP 期望两件事:
A. 向上取整到较高的十分之一,
B. 在百分之一位置显示零(货币的典型需求)。
满足这两个要求似乎需要针对上述每个要求单独的方法。这是一种建立在 suryakiran 建议答案基础上的方法:
//Arguments: number to round, number of decimal places.
function roundPrice(rnum, rlength) {
var newnumber = Math.ceil(rnum * Math.pow(10, rlength-1)) / Math.pow(10, rlength-1);
var toTenths = newnumber.toFixed(rlength);
return toTenths;
}
alert(roundPrice(678.91011,2)); // returns 679.00
alert(roundPrice(876.54321,2)); // returns 876.60
重要提示:此解决方案会产生非常不同的结果,带有负数和指数数。
为了将此答案与两个非常相似的答案进行比较,请参阅以下两种方法。第一个简单地四舍五入到最接近的百分之一,第二个简单地四舍五入到最近的百分之一(更大)。
function roundNumber(rnum, rlength) {
var newnumber = Math.round(rnum * Math.pow(10, rlength)) / Math.pow(10, rlength);
return newnumber;
}
alert(roundNumber(678.91011,2)); // returns 678.91
function ceilNumber(rnum, rlength) {
var newnumber = Math.ceil(rnum * Math.pow(10, rlength)) / Math.pow(10, rlength);
return newnumber;
}
alert(ceilNumber(678.91011,2)); // returns 678.92