javascript - toFixed() 替换函数

标签 javascript firefox math

<分区>

我注意到很多人在使用 javascript 中的 toFixed() 方法时遇到问题。

我自己有一个网站在 IE7 和 FireFox 4.x 中表现不佳。

我终于发现问题出在 toFixed() 方法上。它似乎在某些浏览器中返回一个字符串,而在其他浏览器中不返回 - 它似乎无法预测。

我决定只扩展原型(prototype)对象并创建我自己的方法,而不是每次使用此方法时都必须执行相同的 parseFloat/integer 操作。

使用此方法,您可以四舍五入到任意小数位,并且可以指定要使用的四舍五入类型:floor、ceil 或 null 以使用标准四舍五入(round)。

代码:

     // 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') 使用 floor 进行舍入

mynumbervar.trimNum(2,'ceil') 使用 ceil 进行舍入

mynumbervar.trimNum(2) 使用 round 进行舍入

当然这里的数字“2”就是要保留的小数位数。

我已经在 PC 和 Mac 上的 IE、Safari、Chrome 和 FireFox 中对其进行了测试,它似乎对我来说运行良好。

我希望这可以帮助其他人避免我遇到的 toFixed() 问题......

有谁知道这有什么问题或有什么改进建议吗?

最佳答案

对该功能的一些建议:

当传入参数时,为什么要声明一个局部变量“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/ .

关于javascript - toFixed() 替换函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6697606/

相关文章:

Python 和 Selenium : Force no download window

google-chrome - Chrome 和 Firefox 之间的 d3 缩放差异

algorithm - Kleene 星语义和集合比较

javascript - jQuery - 在点击时动态删除头部元素

javascript - 如何高亮Extjs网格新插入的行?

javascript - jQuery - 当输入不是来自自动完成给出的列表时禁用回车键

javascript - 按属性值对 JavaScript 对象数组进行排序

django - 单击 django 调试工具栏上的 "hide",它从 Firefox 中完全消失了

python - 如何在 Python 中使用蒙特卡罗方法计算 10 维球体的体积?

math - 画一条绕地球的路径?