JavaScript浮動小数点フォーマット方法
JavaScriptにおける浮動小数点のフォーマット方法
JavaScriptでは、浮動小数点数をフォーマットする際に、主にtoFixed()、toPrecision()、**toLocaleString()**の3つのメソッドを使用します。
toFixed(digits)
- 例
const number = 3.14159; const formattedNumber = number.toFixed(2); // 3.14
- 引数
digits
- 小数点以下の桁数(整数)。 - 用途
小数点以下の桁数を指定して、浮動小数点数を文字列に変換します。
toPrecision(precision)
- 引数
precision
- 有効桁数(整数)。
toLocaleString(locale, options)
- 例
const number = 12345.6789; const formattedNumber = number.toLocaleString('en-US', { style: 'currency', currency: 'USD' }); // $12,345.68
- 引数
locale
- ロケールの指定(省略可)。options
- フォーマットオプション(省略可)。
- 用途
ローカルのフォーマット規則に従って、浮動小数点数を文字列に変換します。
注意
toLocaleString()
は、ロケールやオプションに応じてさまざまなフォーマットが可能ですが、ブラウザやプラットフォームによって挙動が異なる場合があります。toFixed()
とtoPrecision()
は、指定した桁数を超える場合に丸めが行われます。
各メソッドの具体的な使用例と解説
const number = 3.14159265359;
// 小数点以下2桁に丸める
const formattedNumber1 = number.toFixed(2); // "3.14"
// 小数点以下0桁に丸める(整数部分のみ)
const formattedNumber2 = number.toFixed(0); // "3"
- 解説
toFixed(2)
は、number
の小数点以下を2桁に丸め、文字列として返します。toFixed(0)
は、小数点以下を切り捨て、整数部分のみを返します。
const number = 3.14159265359;
// 有効桁数を4桁にする
const formattedNumber1 = number.toPrecision(4); // "3.142"
// 有効桁数を2桁にする
const formattedNumber2 = number.toPrecision(2); // "3.1"
- 解説
toPrecision(4)
は、number
の有効桁数を4桁に調整し、文字列として返します。- 有効桁数とは、最初の非ゼロの数字から数えて、指定された桁数までの数字を指します。
const number = 12345.6789;
// 米国形式の通貨表示
const formattedNumber1 = number.toLocaleString('en-US', {
style: 'currency',
currency: 'USD'
}); // "$12,345.68"
// 日本形式の数字表示
const formattedNumber2 = number.toLocaleString('ja-JP'); // "12,345.6789"
- 解説
toLocaleString()
は、指定されたロケールとオプションに従って、数値を文字列に変換します。style: 'currency'
は通貨表示、currency: 'USD'
は通貨を米ドルに設定します。locale: 'ja-JP'
は、日本語のロケールを指定します。
- ES2021 の数値の桁区切り
ES2021 から、数値の桁区切りにアンダースコア_
を使用できるようになりました。1_000_000
のように記述することで、可読性を向上させることができます。 - 丸め誤差
浮動小数点数の表現には限界があるため、丸め誤差が生じる場合があります。特に、0.1 + 0.2
のような計算結果が正確に0.3
とならないことがあるので注意が必要です。
JavaScriptで浮動小数点数をフォーマットする際には、toFixed()
、toPrecision()
、toLocaleString()
の3つのメソッドが主なものとして使用されます。それぞれのメソッドの特性を理解し、適切なメソッドを選択することで、目的に合わせたフォーマットを行うことができます。
- 各ブラウザの挙動に違いがある場合がありますので、注意が必要です。
- より高度なフォーマットが必要な場合は、ライブラリを利用することも検討できます。
標準メソッド以外の選択肢
JavaScriptでは、toFixed()
、toPrecision()
、toLocaleString()
といった標準のメソッド以外にも、浮動小数点数をフォーマットする方法がいくつか存在します。
テンプレートリテラルと文字列結合
- 解説
- テンプレートリテラルを利用することで、変数を埋め込みながら自由に文字列を構築できます。
- 標準メソッドと組み合わせて、より複雑なフォーマットも可能です。
- シンプルで柔軟な方法
const num = 3.14159; const formattedNum = `小数点以下2桁まで: ${num.toFixed(2)}`; console.log(formattedNum); // "小数点以下2桁まで: 3.14"
正規表現
- 解説
- 正規表現を用いて、数値にカンマを挿入するなどの細かい調整が可能です。
- 複雑なフォーマットには、正規表現の知識が必要となります。
- 高度なカスタマイズ
const num = 12345.6789; const formattedNum = num.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ','); console.log(formattedNum); // "12,345.68"
ライブラリ
カスタム関数
- 解説
- 独自のロジックでフォーマット処理を実装できます。
- 複雑なフォーマットや、特定の要件に合わせたカスタマイズに適しています。
- 完全な自由度
function formatNumber(num, decimalPlaces) { const parts = num.toFixed(decimalPlaces).split('.'); parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ','); return parts.join('.'); } const formattedNum = formatNumber(1234567.89, 2); console.log(formattedNum); // "1,234,567.89"
どの方法を選ぶべきか?
- 完全な自由度
カスタム関数 - 高度なフォーマットや特定の用途
ライブラリ - 柔軟なフォーマット
テンプレートリテラル、正規表現 - シンプルで一般的なフォーマット
toFixed()
、toPrecision()
、toLocaleString()
選択のポイントは、
- 保守性
- パフォーマンス
- 可読性
- 必要な機能
- フォーマットの複雑さ
などです。
javascript floating-point