miketwais

work up

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

posted @ 2015-07-01 22:11  MasonZhang  阅读(631)  评论(0)    收藏  举报