JavaScript实现最多保留两位小数(按需处理)

JavaScript实现最多保留两位小数(按需处理)

技术背景

在JavaScript编程中,经常会遇到需要对数字进行四舍五入并最多保留两位小数的场景,例如处理金融数据、统计结果等。然而,由于JavaScript中浮点数的存储方式,直接使用一些内置方法可能会导致不准确的结果。因此,需要寻找合适的方法来实现精确的小数保留。

实现步骤

1. 使用 Math.round() 方法

这是一种常见的方法,通过将数字乘以100,进行四舍五入后再除以100来实现保留两位小数。

1
2
3
function roundToTwo(num) {
return Math.round(num * 100) / 100;
}

2. 考虑浮点数误差,使用 Number.EPSILON

为了避免浮点数误差,可以在四舍五入前加上 Number.EPSILON

1
2
3
function roundToTwoWithEpsilon(num) {
return Math.round((num + Number.EPSILON) * 100) / 100;
}

3. 使用 toFixed() 方法

toFixed() 方法可以将数字转换为指定小数位数的字符串,但需要注意返回的是字符串类型,并且可能会出现多余的零。

1
2
3
function roundToTwoWithToFixed(num) {
return +num.toFixed(2);
}

4. 自定义函数

通过自定义函数来处理各种情况,确保结果的准确性。

1
2
3
4
5
6
7
8
9
10
11
12
function roundNumber(num, scale) {
if (!("" + num).includes("e")) {
return +(Math.round(num + "e+" + scale) + "e-" + scale);
} else {
var arr = ("" + num).split("e");
var sig = "";
if (+arr[1] + scale > 0) {
sig = "+";
}
return +(Math.round(+arr[0] + "e" + sig + (+arr[1] + scale)) + "e-" + scale);
}
}

核心代码

以下是几种实现方式的代码示例:

// 使用 Math.round()
function roundToTwo(num) {
    return Math.round(num * 100) / 100;
}

// 使用 Number.EPSILON
function roundToTwoWithEpsilon(num) {
    return Math.round((num + Number.EPSILON) * 100) / 100;
}

// 使用 toFixed()
function roundToTwoWithToFixed(num) {
    return +num.toFixed(2);
}

// 自定义函数
function roundNumber(num, scale) {
    if (!("" + num).includes("e")) {
        return +(Math.round(num + "e+" + scale) + "e-" + scale);
    } else {
        var arr = ("" + num).split("e");
        var sig = ""

JavaScript实现最多保留两位小数(按需处理)
https://119291.xyz/posts/2025-04-18.javascript-round-to-two-decimal-places/
作者
ww
发布于
2025年4月18日
许可协议