1. 程式人生 > 實用技巧 >Js toFixed()四捨五入BUG的解決方法

Js toFixed()四捨五入BUG的解決方法

問題描述:

在js中四捨五入的函式 toFixed(n) , n為要保留的小數位數。

n為0~20,當n超過20的時候,js會出錯。

    var d=139.605;
      var f=d.toFixed(2);
      alert(f);

期望值:139.61 結果為:139.60

bug:
如果小數點前和要擷取的前一位都是0時,不會按常理擷取。
var h=0.07
h.toFixed(1)的值為0.0

解決方法:重寫toFixed()方法

程式碼如下:

Number.prototype.toFixed=function (d) { 
             var s=this+""; 
             
if(!d)d=0; if(s.indexOf(".")==-1)s+="."; s+=new Array(d+1).join("0"); if(new RegExp("^(-|\\+)?(\\d+(\\.\\d{0,"+(d+1)+"})?)\\d*$").test(s)){ var s="0"+RegExp.$2,pm=RegExp.$1,a=RegExp.$3.length,b=true; if(a==d+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{"+d+"})\\d$"),"$1.$2"); }if(b)s=s.substr(1); return (pm+s).replace(/\.$/,""); }return this+""; };

轉自:https://blog.csdn.net/nndhyp/article/details/78614480

或者可以為了不影響原來的自己加個原型方法

Number.prototype.toSuperFixed = {
-----------------------------------
}