美文网首页
JS 四舍五入

JS 四舍五入

作者: yorickshan | 来源:发表于2018-06-03 19:52 被阅读17次

    1 、tofixed方法

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

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

    举例说明

    11.556 = 11.56 ------六入
    11.554 = 11.55 -----四舍
    11.5551 = 11.56 -----五后有数进位
    11.545 = 11.54 -----五后无数,若前位为偶数应舍去
    11.555 = 11.56 -----五后无数,若前位为奇数应进位

    (0.05).toFixed(1)    //0.1
    (0.15).toFixed(1)    //0.1
    (0.25).toFixed(1)    //0.3
    (0.35).toFixed(1)    //0.3
    (0.45).toFixed(1)    //0.5
    (0.55).toFixed(1)    //0.6
    (0.65).toFixed(1)    //0.7
    (0.75).toFixed(1)    //0.8
    (0.85).toFixed(1)    //0.8
    (0.95).toFixed(1)    //0.9
    
    然而也不完全是银行家进位法

    显然这种规则不符合我们平常在数据中处理的方式。为了解决这样的问题,可以自定义去使用Math.round方法进行自定义式 的实现指定保留多少位数据进行处理。

    2 、round方法

    round() 方法可把一个数字舍入为最接近的整数。例如:Math.round(x),则是将x取其最接近的整数。其取舍的方法使用的是四舍五入中的方法,符合数学中取舍的规则。对于小数的处理没有那么便捷,但是可以根据不同的要求,进行自定义的处理。

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

    Math.round(0.5)    //1
    Math.round(1.5)    //2
    Math.round(2.5)    //3
    Math.round(8.5)    //9
    Math.round(9.5)    //10
    
    Math.round(0.05 * 10) / 10    //0.1
    Math.round(0.15 * 10) / 10    //0.2
    Math.round(0.25 * 10) / 10    //0.3
    Math.round(0.85 * 10) / 10    //0.9
    Math.round(0.95 * 10) / 10    //1
    
    //如果需要强制保留小数位数,再加上toFixed就可以了
    (Math.round(0.95 * 10) / 10).toFixed(1)    //1.0
    

    封装

    //小数四舍五入,f精度范围[0,10]
    Number.prototype.numberRound = function (f) {
        return NumberRound(this, f);
    }
    String.prototype.numberRound = function (f) {
        return NumberRound(this, f);
    }
    function NumberRound(n, f) {
        n = parseFloat(n);
        f = (f == "" || isNaN(f)) ? 0 : (f > 10 ? 10 : parseInt(f));var x = Math.pow(10, f);
        return Math.round(n * x) / x;
    }
    
    (0.15).numberRound(1)        //0.2
    "0.15".numberRound(1)        //0.2
    "0.15".numberRound("")       //0      空,精度为0
    "0.15".numberRound("abc")    //0      非数字,精度为0
    "0.15".numberRound(10000)    //0.15   超出精度最大值,精度为10
    (0.095).numberRound(1).toFixed(2)    //0.10
    

    相关文章

      网友评论

          本文标题:JS 四舍五入

          本文链接:https://www.haomeiwen.com/subject/drfssftx.html