JS 在不引入第三方库的情况下四舍五入且保留两位小数

1. toFixed()

toFixed() 方法可把 Number 四舍五入为指定小数位数的数字

看到题目大部分人第一反应就是用 toFixed(),其实 toFixed() 方法有个坑:

但是其四舍五入的规则与数学中的规则不同,使用的是银行家舍入规则

所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法

简单来说就是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一

> (3.61).toFixed(1)    //四舍
'3.6'
> (3.69).toFixed(1)    //六入
'3.7'
> (3.651).toFixed(1)    //五考虑,五后非零,进
'3.7'
> (3.65).toFixed(1)    //五考虑,五后为零,五前为偶数,舍去
'3.6'
> (3.75).toFixed(1)    //五考虑,五后为零,五前为奇数,进
'3.8'

显然这种规则不符合我们平常在数据中处理的方式,特别是在做跟钱有关的计算时,不同浏览器处理的方式也有所不同,所以尽量不要用这个。

2. round 方法

round() 方法可把一个数字舍入为最接近的整数。跟数学中取舍的规则一样。

Math.round(X * 100) / 100

下面是我项目中用到的方法,

function fomatFloat(num, n) {
    var f = parseFloat(num);

    if (isNaN(f)) {
        return false;
    }
    f = Math.round(num * Math.pow(10, n)) / Math.pow(10, n); // n 幂 向上取整
    var s = f.toString();
    var rs = s.indexOf('.');
    //判定如果是整数,增加小数点再补0
    if (rs < 0) {
        rs = s.length;
        s += '.';
    }
    while (s.length <= rs + n) {
        s += '0';
    }
    return s;
}

你可能感兴趣的:(JS 在不引入第三方库的情况下四舍五入且保留两位小数)