Javascript toFixed()替换函数

Javascript toFixed()替换函数,javascript,firefox,math,Javascript,Firefox,Math,我注意到很多人在javascript中使用toFixed()方法时遇到了问题 一、 我自己也有一个网站,在IE7和Firefox4.x中大放异彩 我最终发现问题出在toFixed()方法上。在某些浏览器中,它似乎返回字符串,而在其他浏览器中,它似乎不可预测 我决定扩展原型对象并创建自己的方法,而不是每次使用此方法时都要执行相同的parseFloat/integer操作 使用此方法,您可以舍入到任意小数位数,并且可以指定要使用的舍入类型:floor、ceil或null以使用标准舍入(round)

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

一、 我自己也有一个网站,在IE7和Firefox4.x中大放异彩

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

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

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

代码:

用法:

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

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

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

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

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

我希望这能帮助其他人避免我的头痛


是否有人知道此功能有任何问题或改进建议?

关于此功能的几点建议:

当局部变量是传入的参数时,为什么要声明它“places”? 你真的不需要试一试。您可以将舍入参数默认为“round”

这种方法在语法上的唯一区别是,如果传入一个不好的舍入值,那么它将失败,而在这种情况下,您的方法将使用“round”。我认为如果一个错误的操作被传递进来,失败可能会更好


下面是一个包含大量测试用例的工作示例:。

您应该将此问题表述为正确的问题,并提供解决方案作为答案。exoboy,这不是一个讨论论坛。问答网站也是如此。@exoboy:是的。认真地您可能想阅读以下内容:@jfriend00:在本例中,它实际上应该转到@exoboy。如果你把你的问题改为:“像这样在数字中添加原型有什么缺点吗?写这个的方式有什么问题吗?或者你建议的改进有什么问题吗?”我无意中宣布了这些地方。另外,我忘了使用| |运算符,捕捉得很好。这就是我所希望的——人们接受我所做的并改进它,这样我们都能受益。谢谢!不!失败从来都不是好事。我只是想让它优雅地失败,这样那些不知道ceil和floor之间区别的人就不需要声明舍入方法。所以,回到“循环”对我来说是非常重要的。看看你是否能解决这个错误并重新发布你的代码。我很可能会给你一个答案,你误解了。如果没有传入任何内容,我的版本仍然默认为round(您可以尝试)。但是如果有人传递了myNum.trimNum(4,“foo”),我的版本将抛出一个异常,因为这是一个非法操作。您的版本将自动切换到“圆形”。我认为最好在指令明显错误时抛出一个错误,而你真的不知道用户希望你做什么。我的版本会像你的一样工作,如果他们称之为myNum.trimNum(4)。我理解你所说的。你有一个很好的观点,但出于我的目的,我想默默地失败,因为它仍然会返回一个有效的结果。因此,无需发布修改后的代码。我认为这对大多数人来说可能更好,任何处于我这种情况的人都可以很容易地适应它。
     // 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 );
} 
// 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));
}