JavaScript 修正 Number.toFixed 精度丢失与兼容性问题
针对原生 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+"";
};
}
免登录快速分享代码:适合面试协作的轻量级JS在线运行工具推荐
2026-11-05 14:45:59
JS空字符串和纯空格转浮点数的结果是什么
2026-11-05 11:04:42
JS在线格式化缩进混乱怎么办?配置项调整技巧
2026-11-04 23:27:25
JS怎么获取秒级时间戳
2026-11-03 21:45:29
JS时间戳怎么从毫秒转换为秒
2026-11-03 20:04:14
