web-dev-qa-db-ja.com

toFixed()とtoPrecision()の違いは?

私はJavaScriptを初めて使い、数値を丸めるtoFixed()toPrecision()を発見しました。ただし、この2つの違いはわかりません。

number.toFixed()number.toPrecision()の違いは何ですか?

112
Jessica

toFixed(n)は、小数点以下のnの長さを提供します。 toPrecision(x)xの全長を提供します。

W3schoolsでの参照: toFixed および toPrecision

[〜#〜] edit [〜#〜]
w3schoolsが最適なソースではないことをしばらく前に知りましたが、kzhの「熱狂的な」コメントを見るまでこの答えを忘れていました。ここに、Mozilla Doc Centerからの追加の参照があります for toFixed() および for toPrecision() 。幸いなことに、この場合、MDCとw3schoolは互いに同意します。

完全を期すために、toFixed()toFixed(0)と同等であり、toPrecision()はフォーマットせずに元の数値を返すだけであることに言及する必要があります。

122
Pops

前者は一定の小数点以下桁数を与え、後者は一定の有効桁数を与えると信じています。

Math.PI.toFixed(2); // "3.14"
Math.PI.toPrecision(2); // "3.1"

さらに、数値に指定された精度よりも多くの整数桁がある場合、toPrecision科学表記法 を生成します。

(Math.PI * 10).toPrecision(2); // "31"
(Math.PI * 100).toPrecision(2); // "3.1e+2"

編集:ああ、もしあなたがJavaScriptに不慣れなら、ダグラス・クロックフォードの本「 JavaScript:The Good Parts 」を強くお勧めします。

55
Tom

これは例で最もよく答えられると思います。

次のデータがあるとします。

var products = [
  {
    "title": "Really Nice Pen",
    "price": 150
  },
  {
    "title": "Golf Shirt",
    "price": 49.99
  },
  {
    "title": "My Car",
    "price": 1234.56
  }
]

これらの各製品をタイトルとフォーマットされた価格で表示します。最初にtoPrecisionを使用してみましょう:

document.write("The price of " + products[0].title + " is $" + products[0].price.toPrecision(5));

The price of Really Nice Pen is $150.00

見栄えが良いので、他の製品でも同様に機能すると思うかもしれません。

document.write("The price of " + products[1].title + " is $" + products[2].price.toPrecision(5));
document.write("The price of " + products[2].title + " is $" + products[2].price.toPrecision(5));

The price of Golf Shirt is $49.990
The price of My Car is $1234.6

あまり良くない。各製品の有効桁数を変更することでこれを修正できますが、製品の配列を繰り返し処理する場合は注意が必要です。代わりにtoFixedを使用しましょう:

document.write("The price of " + products[0].title + " is $" + products[0].price.toFixed(2));
document.write("The price of " + products[1].title + " is $" + products[2].price.toFixed(2));
document.write("The price of " + products[2].title + " is $" + products[2].price.toFixed(2));

The price of Really Nice Pen is $150.00
The price of Golf Shirt is $49.99
The price of My Car is $1234.56

これにより、期待どおりの結果が得られます。推測作業は含まれておらず、丸めもありません。

9
David Kennedy

例は明確に語っています:

var A = 123.456789;

A.toFixed()      // 123
A.toFixed(0)     // 123
A.toFixed(1)     // 123.5
A.toFixed(2)     // 123.46
A.toFixed(3)     // 123.457
A.toFixed(4)     // 123.4568
A.toFixed(5)     // 123.45679
A.toFixed(6)     // 123.456789
A.toFixed(7)     // 123.4567890
A.toFixed(8)     // 123.45678900
A.toFixed(9)     // 123.456789000
A.toFixed(10)    // 123.4567890000
A.toFixed(11)    // 123.45678900000

A.toPrecision()      // 123.456789 
A.toPrecision(0)     // --- ERROR --- 
A.toPrecision(1)     // 1e+2
A.toPrecision(2)     // 1.2e+2
A.toPrecision(3)     // 123
A.toPrecision(4)     // 123.5
A.toPrecision(5)     // 123.46
A.toPrecision(6)     // 123.457
A.toPrecision(7)     // 123.4568
A.toPrecision(8)     // 123.45679
A.toPrecision(9)     // 123.456789
A.toPrecision(10)    // 123.4567890
A.toPrecision(11)    // 123.45678900
7
bob

ただ:

49.99.toFixed(5)
// → "49.99000"

49.99.toPrecision(5)
// → "49.990"
6

特定の状況では、toPrecision()は指数表記を返しますが、toFixed()は返しません。

4
Robusto

たとえば、変数aをvar a = 123.45 a.toPrecision(6)とみなします。出力は123.450 a.toFixed(6)です。出力は123.450000 //小数点以下6桁です