保留小数位toFixed()方法的怪异表现

1 、tofixed方法

toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。例如将数据Num保留2位小数,则表示为:toFixed(Num);但是其四舍五入的规则与数学中的规则不同,使用的是银行家舍入规则,银行家舍入:所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法。具体规则如下:

简单来说就是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。通过谷歌测试:前两句是对的,四舍六入五考虑,五后非零就进一,五后为零的情况和前面的数字有关,但不仅仅是奇偶的关系;而且五后为零后面还有非零也进一,总之在计算的时候可能这就不是我们想要的了,不符合数学规律;

先走一波测试(谷歌):

12.050.toFixed(1)
"12.1"
12.150.toFixed(1)
"12.2"
12.250.toFixed(1)
"12.3"
12.350.toFixed(1)////////
"12.3"
12.450.toFixed(1)////////
"12.4"
12.550.toFixed(1)
"12.6"
12.650.toFixed(1)
"12.7"
12.750.toFixed(1)
"12.8"
12.850.toFixed(1)/////////
"12.8"
12.950.toFixed(1)/////////
"12.9"

12.9501.toFixed(1)
"13.0"

2 、Math.round()方法

例如:对于X进行保留两位小数的处理,则可以使用Math.round(X * 100) / 100.进行处理

function mathfloat(num, n) {
    n = n ? parseInt(n) : 0;
    if(n <= 0) {
        return Math.round(num);
    }
    num = Math.round(num * Math.pow(10, n)) / Math.pow(10, n); //四舍五入
    num = Number(num).toFixed(n); //补足位数
    return num;
};
原文地址:https://www.cnblogs.com/wangtaolearning/p/12557685.html