toFixed的小BUG
准备做一个js中小数点处理的功能函数,搜了一下发现已经有一个方法就是toFixed,但是用了才知道这个小函数是有BUG 的。
看js代码:
var cc = new Number(123.35);
alert(cc.toFixed(1));
在不同浏览器下结果不同,本人亲自测试:
在chrome和firfox下结果是:123.3,但是在IE8下面结果是:123.4
what?这还了得!这么严重的BUG怎么能存在。
做一下小修改吧:
Number.protytype.toFixed =function(s){
return (parseInt(this*Math.pow(10,s)+0.5)/Math.pow(10,s)).toString();
}
就这么简单做一下处理就可以了。chrome,firefox,ie8下面都显示结果为:123.4
ps:写到这里,进行一个小拓展,进一步重写Number的tofixed方法,做一个小小的功能改进,将.00或.00000....等这种后面全部是重复0的去掉。(这也是重写方法的一种写法。)
var _toFixed = Number.prototype.toFixed;
Number.prototype.toFixed = function(){
var result = _toFixed.apply(this,arguments);
 if(/\.[0-9]+$/.test(result)){
       
       return result.replace(/\.0+$/,"").replace(/\.$/,"");
}else return result;
}
测试一下:
var cc = new Number(123);
console.log(cc.toFixed(3));
最后显示的结果为:123而不是123.000


 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号