js 浮点运算出现的精度丢失问题

时间:2025-03-07 17:33:44
 var myf='6.202555';

 myf=Number(myf).toFixed(2);//使用方法

 Number.prototype.toFixed = function(scale) {
     var s = this + "";
     if (!scale) scale = 0;
     if (s.indexOf(".") == -1) s += ".";
     s += new Array(scale + 1).join("0");
     if (new RegExp("^(-|\\+)?(\\d+(\\.\\d{0," + (scale + 1) + "})?)\\d*$").test(s)) {  

         var s = "0" + RegExp.$2, pm = RegExp.$1, a = RegExp.$3.length, b = true;
         if (a == scale + 2)  {
             a = s.match(/\d/g);
             if (parseInt(a[a.length - 1]) > 4) {
                 for (var i = a.length - 2; i >= 0; i--) {
                     a[i] = parseInt(a[i]) + 1;
                     if (a[i] == 10) {
                         a[i] = 0;
                         b = i != 1;
                     }else {
                         break;
                    }
                 }
             }  

             s = a.join("").replace(new RegExp("(\\d+)(\\d{" + scale + "})\\d$"), "$1.$2");
         }
         if (b){
             s = s.substr(1);
         }
         return (pm + s).replace(/\.$/, "");
     }
     return this + "";
 }