私たちが持っていると仮定します
var number = 123456.789;
私が欲しいのは、ロケール「de-DE」でこの番号を次のように表示することです
123.456,79
ロケール「ja-JP」では
123,457
ロケール「en-US」では
123,456.79
など、ユーザーのロケールに応じて。問題は、Javascriptのnumber.toLocaleString
は通貨記号を指定する必要があり、通貨記号をまったく表示しないように指示する方法がわかりません。
私が試したこと:
number.toLocaleString('de-DE', { style: 'currency' }));
// TypeError: undefined currency in NumberFormat() with currency style
number.toLocaleString('de-DE', { style: 'currency', currency: '' }));
// RangeError: invalid currency code in NumberFormat():
number.toLocaleString('de-DE', { style: 'currency', currency: false }));
// RangeError: invalid currency code in NumberFormat(): false
number.toLocaleString('de-DE', { style: 'currency', currency: null }));
// RangeError: invalid currency code in NumberFormat(): null
関数にはオプションcurrencyDisplay
もあります。上記と同じ値をcurrency
オプションで試してみましたが、結果は同じでした。
通貨記号が必要ですか?そうでない場合はnumber.toLocaleString('de-DE')
がうまくいくはずです。
このユースケースを検索してこのスレッドを見つけ、Mozilla FirefoxとGoogleでサポートされているシンボルのRegexを使用して、クラスIntl.NumberFormatを使用してトリックを見つけましたChromeの秘訣は、通貨記号を取得し、それをローカライズ後の正規表現置換の針として使用することです。
このサンプルコードは、トリックを実行する必要があります。
var number = 123456.789;
function getCurrencySymbol(locale, currency) {
return (0).toLocaleString(locale, {
style: 'currency',
currency: currency,
minimumFractionDigits: 0,
maximumFractionDigits: 0
}).replace(/\d/g, '').trim();
}
var numeric_format = new Intl.NumberFormat('id-ID', { style: 'currency', currency: 'IDR', currencyDisplay: 'symbol' });
var localCurrencySymbol = getCurrencySymbol('id-ID', 'IDR');
var CurrencySymbolNeedle = new RegExp(localCurrencySymbol, "g");
var amount = numeric_format.format(number);
console.log(localCurrencySymbol); // Rp
console.log(amount); // Rp 123.456,79
amount = amount.replace(CurrencySymbolNeedle, '').replace(/\s+/g, '');
console.log(amount); // 123.456,79
このクラスがクロスブラウザをサポートしているかどうかはテストしません
編集:通貨記号を取得する関数 ロケールの通貨記号を取得