5

我需要使用 JavaScript 将十进制数字四舍五入到六位,但我需要考虑旧版浏览器,所以我不能依赖 Number.toFixed

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

我正在考虑使用类似的东西

Math.round(N*1000000)/1000000

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

4

5 回答 5

15

试试这个:

if (!Number.prototype.toFixed)

    Number.prototype.toFixed = function(precision) {
        var power = Math.pow(10, precision || 0);
        return String(Math.round(this * power)/power);
    }
于 2008-12-03T13:49:10.363 回答
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用户经常去最新版本。

于 2008-12-03T13:46:40.413 回答
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);
  }
}
于 2008-12-03T13:53:36.377 回答
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)会创建一个错误无效的左手赋值。所以给这个关键字变量a。如果我关闭我的功能也会有所帮助^_^;;

于 2008-12-28T04:40:58.813 回答
0

试试这个:

 Number.prototype.toFixed = function(precision) {
     var power = Math.pow(10, precision || 0);
     return String(Math.round(this * power)/power);
 }
于 2009-09-04T15:43:06.513 回答