web-dev-qa-db-fra.com

Javascript number.toLocaleString devise sans signe monétaire

Supposons que nous ayons

var number = 123456.789;

Ce que je veux, c'est afficher ce numéro dans les paramètres régionaux "de-DE" comme

123.456,79

en locale 'ja-JP' as

123,457

en locale 'en-US' as

123,456.79

et ainsi de suite selon les paramètres régionaux de l'utilisateur. Le problème est que Javascript est number.toLocaleString nécessite de spécifier le symbole monétaire et je ne sais pas comment dire de ne pas l'afficher du tout.

Ce que j'ai essayé:

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

La fonction a également l'option currencyDisplay. J'ai essayé les mêmes valeurs que ci-dessus avec l'option currency mais avec le même résultat.

9
dMedia

Avez-vous besoin du symbole monétaire? Sinon, number.toLocaleString('de-DE') devrait faire l'affaire.

0
Cornelius Fillmore

J'ai trouvé ce fil en recherchant ce cas d'utilisation, et l'astuce que j'utilise en utilisant la classe Intl.NumberFormat , avec Regex de symbole pris en charge sur Mozilla Firefox et Google Chrome.L'astuce consiste à prendre le symbole monétaire et à l'utiliser comme une aiguille pour remplacer l'expression régulière après la localisation.

Cet exemple de code devrait faire l'affaire:

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

Je ne teste pas si cette classe prend en charge plusieurs navigateurs

Edit: Fonction pour obtenir le symbole de la monnaie à partir de Obtenir le symbole de la devise pour un lie

0
Imran Nababan