首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >toFixed()替换函数

toFixed()替换函数
EN

Stack Overflow用户
提问于 2011-07-15 01:42:01
回答 1查看 2K关注 0票数 3

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

我自己有一个网站,它在IE7和FireFox 4.x上大做文章。

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

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

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

代码:

代码语言:javascript
复制
     // 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()问题……

有没有人知道这方面有什么问题,或者有什么改进的建议?

EN

回答 1

Stack Overflow用户

发布于 2011-07-15 01:53:23

以下是对该函数的一些建议:

当一个参数传入时,为什么要声明一个局部变量"places“呢?你并不真的需要try/catch。您可以只将舍入参数默认为"round“。

代码语言:javascript
复制
// 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/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6697606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档