Number.prototype.toFixed()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

toFixed() メソッドは、数を固定小数点表記を用いて整形します。

試してみましょう

構文

js
toFixed()
toFixed(digits)

引数

digits 省略可

小数点の後に現れる桁の数です。これは 0 以上 100 以下の値です。この引数が省略されると、0 として扱われます。

返値

与えられた数値を固定小数点表記を用いて表した文字列です。

例外

RangeError

digits0 以上 100 以下ではない場合に発生します。

TypeError

このメソッドが Number ではないオブジェクト上で実行された場合に発生します。

解説

toFixed() メソッドは numObj の文字列表記を、指数表記を使用せず、小数点以下を正確に digits 桁として返します。必要に応じて数値は丸められ、小数部は指定された長さになるよう必要に応じて 0 で埋められます。

numObj の絶対値が 1e+21 以上の場合は、このメソッドは単純に Number.prototype.toString() を呼び出し、指数表記での文字列を返します。toFixed()numObj の値が有限数でない場合、"Infinity""NaN""-Infinity" の何れかを返します。

toFixed() の出力は、一部の値では toString() よりも正確かもしれませんが、これは toString() が隣の数値と区別できる程度の有効数字しか出力しないためです。例えば、次のようになります。

js
(1000000000000000128).toString(); // '1000000000000000100'
(1000000000000000128).toFixed(0); // '1000000000000000128'

しかし、高すぎる digits の精度を選ぶと、10 進数の小数を浮動小数点で正確に表せないため、予期せぬ結果を返すことがあります。例えば次のようになります。

js
(0.3).toFixed(50); // '0.29999999999999998889776975374843459576368331909180'

toFixed() の使用

js
const numObj = 12345.6789;

numObj.toFixed(); // '12346'。四捨五入され小数部がなくなる
numObj.toFixed(1); // '12345.7' を返す。切り上げ
numObj.toFixed(6); // '12345.678900'を返す。0 を追加
(1.23e20).toFixed(2); // '123000000000000000000.00'
(1.23e-10).toFixed(2); // '0.00'
(2.34).toFixed(1); // '2.3'
(2.35).toFixed(1); // '2.4'。切り上げ
(2.55).toFixed(1); // '2.5'
// 浮動小数点数で正確に表せず、最も近い浮動小数点数の
// 方が低いため、切り捨てられる。
(2.449999999999999999).toFixed(1); // '2.5'
// 2.45 との差が NUMBER.EPSILON 未満なので、切り上げ
// このリテラルは、実際には 2.45 と同じ数値をエンコードしている

(6.02 * 10 ** 23).toFixed(50); // 6.019999999999999e+23; 巨大な数値は指数表記を使用

toFixed() を負の数に使用

メンバーアクセスは単項マイナスよりも優先順位が高いので、文字列を取得するためには負の数の式全体をグループ化する必要があります。

js
-2.34.toFixed(1); // -2.3, a number
(-2.34).toFixed(1); // '-2.3'

仕様書

Specification
ECMAScript Language Specification
# sec-number.prototype.tofixed

ブラウザーの互換性

BCD tables only load in the browser

関連情報