JavaScript 修正 Number.toFixed 精度丢失与兼容性问题

作者:键盘侠时间:2026-10-30 17:46:39浏览:169

针对原生 Number.toFixed 方法在部分场景下返回错误结果(如0.009.toFixed(2)返回0.00)以及IE5.0等旧版浏览器不支持的问题,提供一段自定义修正代码。该实现通过字符串处理与正则匹配模拟四舍五入逻辑,解决了精度偏差并提升了兼容性,可直接替换或兼容调用。

修正 Number.toFixed 精度与兼容性问题

原生 JavaScript 的 Number.toFixed() 方法存在已知缺陷,例如调用 0.009.toFixed(2) 时预期结果为 0.01,但实际返回 0.00。此外,该方法对客户端 JavaScript 版本有较高要求,在 IE5.0 等旧版浏览器中无法使用。为此,编写了上述修正代码以解决此 BUG 并提升兼容性。若希望完全使用此自定义方法替代系统原生方法,只需移除最外层的 if 判断即可。



//by meizz



if(typeof(Number.prototype.toFixed)!="function")


{

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+"";



  };  

} 
作者最新文章