toFixed()替换函数

时间:2011-07-14 17:42:01

标签: javascript firefox math

我注意到许多人在使用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()头痛......

有没有人知道有任何问题或有任何改善建议吗?

1 个答案:

答案 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/