问题描述:
在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 = { ----------------------------------- }