5

JavaScriptを使用して小数を6桁に丸める必要がありますが、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

別のオプションは(これは不必要に文字列に変換されず、(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

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業界では永遠の1年半前… 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

これを試して:

 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 に答える