Suppose we have
var number = 123456.789;
What I want is to display this number in locale 'de-DE' as
123.456,79
in locale 'ja-JP' as
123,457
in locale 'en-US' as
123,456.79
and so on according to user's locale. The problem is that Javascript's number.toLocaleString
requires to specify currency sign and I can't find out how to tell to not display it at all.
What I tried:
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
The function also has option currencyDisplay
. I tried the same values as above with currency
option but with same result.
UPDATE (2020-11-25)
A few people pointed to .resolvedOptions()
. It basically solves the question:
const currencyFractionDigits = new Intl.NumberFormat('de-DE', {
style: 'currency',
currency: 'EUR',
}).resolvedOptions().maximumFractionDigits;
const value = (12345.678).toLocaleString('de-DE', {
maximumFractionDigits: currencyFractionDigits
});
console.log(value); // prints 12.345,68
Thank you.
number.toLocaleString('de-DE')
– Craving