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.
Avez-vous besoin du symbole monétaire? Sinon, number.toLocaleString('de-DE')
devrait faire l'affaire.
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