JavaScript has some super built in internationalisation features and Intl.NumberFormat
is the one to use for displaying numbers and prices.
The formatting options
Intl.NumberFormat
allows you to format numbers into four different styles.
currency
for currenciesdecimal
for formatting decimals (this is the default)percent
for formatting percentagesunit
for formatting units (currently only supported in Chrome)
Currency formatting
For formatting currency you use the Intl.NumberFormat
constructor. Just pass in the BCP 47 language tag (e.g. en-GB for United Kingdom English), and the ISO 4217 currency code (E.g. EUR for Euro, USD for United States Dollars and GBP for British Pounds).
Currency example
Below is an example of formatting a number into British Pounds.
var price = 1245.99;
var priceFormattedUK = new Intl.NumberFormat(
'en-GB', // BCP 47 language tag
{
style: 'currency', // we want a currency
currency: 'GBP' // ISO 4217 currency code
}
).format(price);
console.log(priceFormattedUK);
// output: £1,245.99
The output for above code includes the currency symbol, a comma to separate the thousand and a decimal point for the pence. Nice!
By default the currency symbol is outputted, however you can choose to display the name
.
var price = 1245.99;
var priceFormattedUK = new Intl.NumberFormat(
'en-GB', // BCP 47 language tag
{
style: 'currency', // we want a currency
currency: 'GBP', // ISO 4217 currency code
currencyDisplay: 'name'
}
).format(price);
console.log(priceFormattedUK);
// output: 1,245.99 British pounds
Different currencies
Below is an example of formatting for different currencies, so you can see how the numbers are outputted different locales. For example, for the Japanese Yen the decimal value is not outputted and for Euros a dot is used for numbers over a thousand and a comma is used for the decimal, which is the opposite of the United States Dollars.
Decimal formatting
Decimal is the default for number formatting and as you might expect, it formats numbers into decimals.
Percent formatting
Percentage formatting formats numbers into percentages. Interestingly in the example below, the German percentage format has a space between the number and the percent symbol.
Unit formatting
Unit formatting is currently only supported in Chrome, so is not particularly useful at the moment. However, this could be a cool option for certain types of websites in the future.
Default locale
If you don’t supply a locale to Intl.NumberFormat
, it uses a matching algorithm to try to match it to what it thinks your locale is. However, with currency
it seems to not display a symbol if you don’t specify a value for locale.
Browser support
Browser support for Intl.NumberFormat
for currency
, decimals
and percentage
is pretty good, with all modern browsers supporting it and even IE11. See CanIUse for full list.
However, the unit formatting browser support has a way to go before you can use it in production.