JavaScript | 数値を指定したロケールに応じた形式で文字列に変換(toLocaleString() メソッド)

javascrpit JavaScript
スポンサーリンク

ここでは、toLocaleString() を活用した 汎用的で安全な通貨フォーマッタ関数
formatCurrency(value, locale, currency, opts) を、初心者でも理解しやすいように解説付きで紹介します。

通貨表示ユーティリティ関数:formatCurrency

コード例(コメント付き)

/**
 * 通貨フォーマット用ユーティリティ関数
 * @param {number} value - 通貨として表示したい数値
 * @param {string} [locale='ja-JP'] - 表示言語と地域(例: 'en-US', 'ja-JP')
 * @param {string} [currency='JPY'] - 通貨コード(ISO 4217: 'USD', 'JPY', 'EUR'など)
 * @param {Object} [opts={}] - 追加オプション(toLocaleString の第2引数)
 * @returns {string} - 整形済みの通貨文字列
 */
function formatCurrency(value, locale = 'ja-JP', currency = 'JPY', opts = {}) {
  // デフォルトオプション
  const defaultOptions = {
    style: 'currency',     // 通貨形式にする
    currency,              // 通貨コード
    currencyDisplay: 'symbol', // 通貨シンボルを使う(例:¥, $, €)
    minimumFractionDigits: 0,  // 小数桁(日本円なら0、ドルなら2)
    maximumFractionDigits: 2,
    ...opts                // 呼び出し時の上書き設定を展開
  };

  // 数値以外は0扱いにして安全に
  const num = Number(value) || 0;

  // フォーマットして返す
  return num.toLocaleString(locale, defaultOptions);
}
JavaScript

使用例

console.log(formatCurrency(123456.789));                 
// → "¥123,457"  (日本円、デフォルトロケール)

console.log(formatCurrency(123456.789, 'en-US', 'USD')); 
// → "$123,456.79"(米ドル表記)

console.log(formatCurrency(123456.789, 'de-DE', 'EUR')); 
// → "123.456,79 €"(ドイツ語圏のユーロ表記)

console.log(formatCurrency(123456.789, 'en-US', 'USD', {
  currencyDisplay: 'code', minimumFractionDigits: 0
}));
// → "USD 123,457"

console.log(formatCurrency(0.056, 'en-US', 'USD', { style: 'percent' }));
// → "6%" (styleを変えればパーセントにも対応可能)
JavaScript

ポイント解説

機能内容
locale地域・言語設定。ja-JP, en-US, fr-FR などを指定。
currencyISO 4217 コード。JPY, USD, EUR など。
style: 'currency'数値を通貨形式で整形する。
currencyDisplay"symbol"(¥, $, € など)
"code"(JPY, USD)
"name"(英語表記 “Japanese yen” など)
minimumFractionDigits / maximumFractionDigits小数点以下の桁数を制御。
opts任意の追加設定(notation: 'compact' など)も柔軟に渡せる。

応用例 — compact 表示(例:K / M 表記)

console.log(formatCurrency(2500000, 'en-US', 'USD', {
  notation: 'compact',
  compactDisplay: 'short'
}));
// → "$2.5M"
JavaScript

よくあるミスと対策

ミス対策
1000.toLocaleString() がエラー(1000).toLocaleString() にする(数値リテラルを括弧で囲む)
currency 未指定で style: 'currency' を使う必ず 'JPY', 'USD' などを指定
小数点以下がズレるminimumFractionDigits / maximumFractionDigits を明示的に設定

まとめ

  • toLocaleString の通貨対応は ロケール依存で自動フォーマットしてくれる とても便利な仕組み。
  • 上のような formatCurrency() 関数にしておけば、グローバルアプリや多言語ECサイトでも共通利用できる。
  • Intl.NumberFormat を直接使っても同じ効果(高速化したいときはそちら推奨)。
タイトルとURLをコピーしました