我注意到很多人在使用javascript中的toFixed()方法时遇到了麻烦。
我自己有一个网站,它在IE7和FireFox 4.x上大做文章。
我最终发现问题出在toFixed()方法上。它似乎在某些浏览器中返回字符串,而在其他浏览器中不返回-它的行为似乎不可预测。
我决定只扩展prototype对象并创建自己的方法,而不是每次使用此方法时都要执行相同的parseFloat/integer操作。
使用此方法可以舍入到任意数量的小数位数,并且可以指定要使用的舍入类型: floor、ceil或null以使用标准舍入(舍入)。
代码:
// a replacement for the toFixed() function in javascript
Number.prototype.trimNum = function(places,rounding){
var places,result,num = parseFloat(this),multiplier = Math.pow( 10,places );
try {
result = Math[rounding](num * multiplier) / multiplier;
} catch(e){
result = Math.round(num * multiplier) / multiplier;
}
return Number( result );
} 用法:
使用floor进行舍入的mynumbervar.trimNum(2,'floor')
使用ceil进行舍入的mynumbervar.trimNum(2,'ceil')
使用round进行舍入的mynumbervar.trimNum(2)
当然,这里的数字"2“是要保留的小数位数。
我已经在IE,Safari,Chrome和FireFox的PC和mac上测试了它,它似乎对我来说工作得很好。
我希望这能帮助其他人避免我遇到的toFixed()问题……
有没有人知道这方面有什么问题,或者有什么改进的建议?
发布于 2011-07-15 01:53:23
以下是对该函数的一些建议:
当一个参数传入时,为什么要声明一个局部变量"places“呢?你并不真的需要try/catch。您可以只将舍入参数默认为"round“。
// a replacement for the toFixed() function in javascript
Number.prototype.trimNum = function(places, rounding) {
rounding = rounding || "round";
var num = parseFloat(this), multiplier = Math.pow(10, places);
return(Number(Math[rounding](num * multiplier) / multiplier));
}这个函数唯一的语法差异是,如果传入了一个错误的舍入值,那么它将失败,而在这种情况下,您应该使用"round“。我认为如果传入了一个错误的操作,那么失败可能会更好。
下面是一个包含一系列测试用例的工作示例:http://jsfiddle.net/jfriend00/5KRBK/。
https://stackoverflow.com/questions/6697606
复制相似问题