我注意到许多人在使用javascript中的toFixed()方法时遇到了问题。
我,我自己,有一个适合IE7和FireFox 4.x的网站。
我终于发现问题是toFixed()方法。它似乎在某些浏览器中返回一个字符串而不是在其他浏览器中 - 它似乎无法预测。
每次我使用这个方法时,我都不是必须做同样的parseFloat /整体体操,而是决定只扩展原型对象并创建自己的方法。
使用此方法,您可以舍入到任意数量的小数位,并且可以指定要使用的舍入类型:floor,ceil或null以使用标准舍入(round)。
CODE:
// 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 );
}
用法:
mynumbervar.trimNum(2,'floor')
使用楼层进行回合
mynumbervar.trimNum(2,'ceil')
使用ceil进行回合
mynumbervar.trimNum(2)
使用回合进行回合
当然,这里的数字“2”将是要保留的小数位数。
我已经在PC和Mac上的IE,Safari,Chrome和FireFox中进行了测试,它似乎对我有用。
我希望这可以帮助别人避免我曾经遇到的toFixed()头痛......
有没有人知道有任何问题或有任何改善建议吗?
答案 0 :(得分:0)
有关该功能的几点建议:
为什么在传入参数时声明局部变量“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));
}
与这个语法唯一的区别在于,如果传入的舍入值较差,则会失败,而在这种情况下,你的用法会使用“舍入”。我认为如果传递了错误的操作,最好失败。
这是一个包含大量测试用例的工作示例:http://jsfiddle.net/jfriend00/5KRBK/。