Javascript:将舍入的数字格式化为 N 个小数

2022-08-30 04:56:58

在JavaScript中,将数字舍入为N个小数位的典型方法是这样的:

function roundNumber(num, dec) {
  return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
}

function roundNumber(num, dec) {
  return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
}

console.log(roundNumber(0.1 + 0.2, 2));
console.log(roundNumber(2.1234, 2));

但是,此方法将舍入到最多 N 个小数位,而我希望始终舍入到 N 个小数位。例如,“2.0”将四舍五入为“2”。

有什么想法吗?


答案 1

我认为这里给出的所有方法都有更简单的方法,并且该方法已经在JavaScript中实现。Number.toFixed()

只需编写:

var myNumber = 2;

myNumber.toFixed(2); //returns "2.00"
myNumber.toFixed(1); //returns "2.0"

等。。。


答案 2

我找到了一种方法。这是Christoph的代码,修复了一下:

function toFixed(value, precision) {
    var precision = precision || 0,
        power = Math.pow(10, precision),
        absValue = Math.abs(Math.round(value * power)),
        result = (value < 0 ? '-' : '') + String(Math.floor(absValue / power));

    if (precision > 0) {
        var fraction = String(absValue % power),
            padding = new Array(Math.max(precision - fraction.length, 0) + 1).join('0');
        result += '.' + padding + fraction;
    }
    return result;
}

如果您想知道为什么我添加了“+ 1”,请阅读使用数组构造函数重复字符的详细信息。