ここでは、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 などを指定。 |
currency | ISO 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 を直接使っても同じ効果(高速化したいときはそちら推奨)。