如何在JavaScript中编写Number.toFixed的原型?

时间:2008-12-03 13:33:46

标签: javascript rounding precision

我需要使用JavaScript将十进制数字舍入到六个位置,但我需要考虑旧版浏览器,因此我can't rely on Number.toFixed

  

toExponential,toFixed和toPrecision的最大优点是它们是Mozilla中不支持的相当现代的构造,直到Firefox 1.5版(尽管IE支持自5.5版以来的方法)。虽然使用这些方法最安全,但是如果您正在编写公共程序,那么旧的浏览器将会破坏,因此建议您提供自己的原型,以便为旧浏览器提供这些方法的功能。

我正在考虑使用像

这样的东西
Math.round(N*1000000)/1000000

将此原型提供给旧浏览器的最佳方法是什么?

5 个答案:

答案 0 :(得分:15)

试试这个:

if (!Number.prototype.toFixed)

    Number.prototype.toFixed = function(precision) {
        var power = Math.pow(10, precision || 0);
        return String(Math.round(this * power)/power);
    }

答案 1 :(得分:0)

我认为Firefox 1.5和IE 5几乎不再使用,或者只是极少数人使用 这有点像支持Netscape Navigator的编码... :-)
除非其他主要浏览器(Opera?Safari?不太可能......)不支持此功能,或者您的Web日志显示许多旧版浏览器使用,否则您可以使用这些方法。
有时,我们必须继续前进。 ^ _ ^

[编辑]在Opera 9.50和Safari 3.1上正常工作

javascript: var num = 3.1415926535897932384; alert(num.toFixed(7));

您所引用的文章是一年半以前,IT行业的永恒......我认为,与IE用户不同,Firefox用户经常会使用最新版本。

答案 2 :(得分:0)

Bytes website起,这个功能几乎与Serge llinsky的相同:

if (!num.toFixed) 
{
  Number.prototype.toFixed = function(precision) 
  {
     var num = (Math.round(this*Math.pow(10,precision))).toString();
     return num.substring(0,num.length-precision) + "." + 
            num.substring(num.length-precision, num.length);
  }
}

答案 3 :(得分:0)

另一个选项是(不会不必要地转换为字符串,并且还纠正了(162.295).toFixed(2)到162.29(应该是162.30)的错误计算。)

Number.prototype._toFixed=Number.prototype.toFixed; //Preserves the current function
Number.prototype.toFixed=function(precision){
/* step 1 */ var a=this, pre=Math.pow(10,precision||0);
/* step 2 */ a*=pre; //currently number is 162295.499999
/* step 3 */ a = a._toFixed(2); //sets 2 more digits of precision creating 16230.00
/* step 4 */ a = Math.round(a);
/* step 5 */ a/=pre;
/* step 6 */ return a._toFixed(precision);
}
/*This last step corrects the number of digits from 162.3 ( which is what we get in
step 5 to the corrected 162.30. Without it we would get 162.3 */

编辑:尝试此特定版本后,this*=Math.pow(10, precision||0)会创建无效的左手分配错误。所以给了this关键字变量a。如果我关闭我的函数^ _ ^ ;;

也会有所帮助

答案 4 :(得分:0)

试试这个:

 Number.prototype.toFixed = function(precision) {
     var power = Math.pow(10, precision || 0);
     return String(Math.round(this * power)/power);
 }