JS四舍五入问题处理

时间:2022-01-09 09:44:01

由于js处理浮点数有精度问题,所以在用toFixed保留小数位数的时候可能有不如我们预期的情况出现,比如

JS四舍五入问题处理

有时候这个是正常的四舍五入,但是有时候会出现如下情况

JS四舍五入问题处理

并不是我们预想中的四舍五入,所以我们就需要重写toFixed来修复这个问题,解决方法如下

/*重写toFixed解决四舍五入不准确问题*/
Number.prototype.toFixed =  function(s)
{
    var temp = 0.0000001;
    if((this+"").indexOf("-") != -1){//
        temp = -0.0000001;
    }
   var  changenum=(Math.round(this * Math.pow( 10, s ) + temp)/ Math.pow( 10, s )).toString();
    var index=changenum.indexOf(".");
    if(index<0&&s>0){
        changenum=changenum+".";
        for(i=0;i<s;i++){
            changenum=changenum+"0";
        }


    }else {
        index=changenum.length-index;
        for(var i=0;i<(s-index)+1;i++){
            changenum=changenum+"0";
        }


    }


    return changenum;
}