【浮点问题】重写Number.prototype.toFixed()方法
浮点的问题造成的(计算机准确的保存浮点) 重写Number.prototype.toFixed()方法 解决四舍六入五看双的 类似 2.445.toFixed(2)=2.44 的问题
修改前
2.445.toFixed(2)=2.44
原因 :计算机二进制编码导致的精度问题
思路:四舍五入,转换为整数再处理,避免浮点数精度的损失 正数+1 负数-1
修改
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+""; }
修改后