私はJavaScriptを初めて使い、数値を丸めるtoFixed()
とtoPrecision()
を発見しました。ただし、この2つの違いはわかりません。
number.toFixed()
とnumber.toPrecision()
の違いは何ですか?
toFixed(n)
は、小数点以下のn
の長さを提供します。 toPrecision(x)
はx
の全長を提供します。
W3schoolsでの参照: toFixed および toPrecision
[〜#〜] edit [〜#〜]:
w3schoolsが最適なソースではないことをしばらく前に知りましたが、kzhの「熱狂的な」コメントを見るまでこの答えを忘れていました。ここに、Mozilla Doc Centerからの追加の参照があります fortoFixed()
および fortoPrecision()
。幸いなことに、この場合、MDCとw3schoolは互いに同意します。
完全を期すために、toFixed()
はtoFixed(0)
と同等であり、toPrecision()
はフォーマットせずに元の数値を返すだけであることに言及する必要があります。
前者は一定の小数点以下桁数を与え、後者は一定の有効桁数を与えると信じています。
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 」を強くお勧めします。
これは例で最もよく答えられると思います。
次のデータがあるとします。
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
これにより、期待どおりの結果が得られます。推測作業は含まれておらず、丸めもありません。
例は明確に語っています:
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
ただ:
49.99.toFixed(5)
// → "49.99000"
49.99.toPrecision(5)
// → "49.990"
特定の状況では、toPrecision()
は指数表記を返しますが、toFixed()
は返しません。
たとえば、変数aをvar a = 123.45 a.toPrecision(6)とみなします。出力は123.450 a.toFixed(6)です。出力は123.450000 //小数点以下6桁です