web-dev-qa-db-ja.com

通貨記号のないJavascript number.toLocaleString通貨

私たちが持っていると仮定します

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オプションで試してみましたが、結果は同じでした。

9
dMedia

通貨記号が必要ですか?そうでない場合はnumber.toLocaleString('de-DE')がうまくいくはずです。

0

このユースケースを検索してこのスレッドを見つけ、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

このクラスがクロスブラウザをサポートしているかどうかはテストしません

編集:通貨記号を取得する関数 ロケールの通貨記号を取得

0
Imran Nababan