toLocaleString の オプション引数 を初心者向けに噛み砕いて、実例つきで詳しく説明します。ポイントごとにコードと出力例を載せるので、試しながら理解できるはずです。
概要(おさらい)
num.toLocaleString(locales, options) は内部で Intl.NumberFormat を使い、ロケール(地域)ごとの書式(桁区切り、少数点、通貨記号、パーセント表記など)で数値を文字列に変換します。locales を省くと実行環境のデフォルトロケールが使われます。
基本オプション一覧(まずこれを押さえる)
style:"decimal"(通常)、"currency"(通貨)、"percent"(パーセント)、"unit"(単位)。デフォルトは"decimal"。currency:style: "currency"のときに必須。ISO 4217 の通貨コード(例:"USD","JPY","EUR")。currencyDisplay:通貨の表示方法。"symbol"($や¥、デフォルト)、"code"(USD)、"name"(英語名 “US dollars” など)、"narrowSymbol"(狭いシンボル)。minimumFractionDigits/maximumFractionDigits:小数点以下の最小/最大桁数(整数は 0〜20 の範囲で指定)。Currency の場合は通貨の小数単位(例:JPY は 0)を既定とする実装が多い。minimumSignificantDigits/maximumSignificantDigits:有効数字(有効桁数)を指定したいときに使う。useGrouping:桁区切り(千区切り)を有効にするか。true/falseまたは"auto"など(ブラウザ実装により細かい値がある)。notation:"standard"(通常),"scientific"(指数表示),"engineering"(工学表記),"compact"(縮約表示 1.2K のような表記)を指定可能。compactを使うとcompactDisplay("short"/"long")も使えます。
(細かい/新しいオプションやブラウザ差異は MDN の Intl.NumberFormat ページ参照が確実です。)
具体例(コード+出力) — 実際にどんな文字列が返るかを確認
1. 通常の小数(ロケール指定なし)
const n = 8242.56;
console.log(n.toLocaleString()); // 例: "8,242.56" (環境のロケール次第)
JavaScript(ロケールによって "8.242,56" や空白区切り "8 242,56" になる。)
2. 小数桁数を指定(minimumFractionDigits / maximumFractionDigits)
const n = 2;
console.log(n.toLocaleString('en-US', { minimumFractionDigits: 2 })); // "2.00"
console.log(1234.567.toLocaleString('en-US', { maximumFractionDigits: 1 })); // "1,234.6"
JavaScriptminimumFractionDigitsは表示する小数の下限(足りない場合は0で埋める)。maximumFractionDigitsは丸めの上限(四捨五入に相当する動き)。
3. 通貨表示(style: "currency")
const price = 1234.5;
console.log(price.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' })); // "¥1,235"(JPYは小数なし)
console.log(price.toLocaleString('en-US', { style: 'currency', currency: 'USD' })); // "$1,234.50"
JavaScriptcurrencyは必須。通貨により標準的小数桁数が異なる(例:JPY は 0、USD は 2 が普通)。
4. 通貨の表示方法を変える(currencyDisplay)
const n = 1000;
console.log(n.toLocaleString('en-US', { style: 'currency', currency: 'EUR', currencyDisplay: 'symbol' })); // "€1,000.00"
console.log(n.toLocaleString('en-US', { style: 'currency', currency: 'EUR', currencyDisplay: 'code' })); // "EUR 1,000.00"
console.log(n.toLocaleString('en-US', { style: 'currency', currency: 'EUR', currencyDisplay: 'name' })); // "1,000.00 euros"(ロケール次第)
JavaScript5. パーセント表示(style: "percent")
const ratio = 0.1234;
console.log(ratio.toLocaleString('en-US', { style: 'percent', minimumFractionDigits: 1 })); // "12.3%"
JavaScript6. 短縮表記(notation: "compact") — 1000 → “1K” のような表示
const big = 12345;
console.log(big.toLocaleString('en-US', { notation: 'compact', compactDisplay: 'short' })); // "12K"(環境により "12K" や "12 thousand" など)
JavaScriptcompactはcompactDisplay("short"/"long")で短い/長い表現を選べます。
7. 指数表示(notation: "scientific")
const n = 123456;
console.log(n.toLocaleString('en-US', { notation: 'scientific', maximumFractionDigits: 2 })); // "1.23E5"(表記はロケール/実装に依る)
JavaScript- 科学的表記や工学表記(
"engineering")も指定できます。
有効数字 vs 小数桁(混乱しやすいポイント)
minimumFractionDigits/maximumFractionDigitsは小数点以下の桁数を直接制御。小数点以下の表示を揃えたいときに使う。minimumSignificantDigits/maximumSignificantDigitsは数全体の「有効桁数」をそろえる。例:12345を有効桁数 3 にすると1.23e4や12,300のような出力になる場合がある(notation によって挙動が変わる)。
注意点・実務的なコツ
- 整数リテラルに直接呼ぶと構文エラー
1000.toLocaleString()は構文エラーになります。(1000).toLocaleString()のように括るか1000 .toLocaleString()と空白を入れてください。 - ブラウザ/エンジン差がある
実装差(例:円のシンボル位置、空白の扱い、小数の丸め結果の細かい差)は残ります。大量にフォーマットする場合はnew Intl.NumberFormat(locales, options)を作ってformat()を繰り返す方が高速です。 - 通貨コードは ISO 4217 を使う(例:
USD,JPY,EUR)。style: 'currency'のときはcurrencyを必ず指定します。 - 丸めはオプションで制御
maximumFractionDigitsを設定すると四捨五入に近い結果で丸められます。金融計算など正確な丸めが必要な場合は数値計算自体を慎重に(整数演算や専用ライブラリを検討)行ってから表示にtoLocaleStringを使うのが安全です。 - パフォーマンス
たくさんの数値を頻繁にフォーマットするなら、毎回toLocaleString(内部でIntl.NumberFormatを作る実装が多い)を呼ぶより、const nf = new Intl.NumberFormat(locale, options); nf.format(n)を複数回使う方が速くなります。
よくある用途パターン(短いまとめと例)
- 通貨表示(自動的に小数桁数を通貨の規定に合わせたい)→
style: 'currency', currency: 'XXX'。 - 小数桁を揃えたい(価格表など)→
minimumFractionDigitsとmaximumFractionDigits。 - パーセント表示→
style: 'percent'。 - 端末ロケールにあわせて千区切り・小数点を切り替えたい→
localesを省略または指定。
参考(実装仕様・詳細を深掘りしたいとき)
- MDN:
Number.prototype.toLocaleString()(基本・例)。MDN ウェブドキュメント - MDN:
Intl.NumberFormat(オプション仕様、notation、useGrouping、digit オプションなど)。MDN ウェブドキュメント - MDN:
resolvedOptions()(指定したオプションが実際にどう解決されたか確認できる)。MDN ウェブドキュメント
