Formatting Money in JavaScript with Intl.NumberFormat
JavaScript's Intl.NumberFormat
object offers a simple way to format currency values according to different international standards. Here's how:
How to
The Intl.NumberFormat
function allows you to format numbers as currency with just a few lines of code.
You specify the user's locale and the currency code, and it handles the rest, including the currency symbol, number formatting, and decimal places.
I think seeing it in action will make it easy.
As an example, to format a number as US dollars:
console.log( new Intl.NumberFormat("en-US", { style: "currency", currency: "USD", }).format(1234.56), ); // Outputs: "$1,234.56" // Or if you want to make it reusable: const usFormatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', }); console.log(usFormatter.format(1234.56)); // Outputs: "$1,234.56"
In this example, en-US
is the locale for the United States, and USD
is the currency code for US dollars. The output is "$1,234.56", formatted according to US standards.
Euros Example
For Euros, which are used in many European countries, the formatting changes, and even as a European, I have no idea what to expect. But here's how you would format a value for a specific country easily:
// Germany const germanyFormatter = new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR', }); console.log(germanyFormatter.format(1234.56)); // Outputs: "1.234,56 €"
Notice how the comma and period roles are reversed, which is standard in many European countries, and the currency symbol is placed after the number.
Customizing the Format
There is a lot more options, and I think the best exhaustive list I could find for you to read through is here.
But as an example you can alter the options to do a lot of cool thing that might otherwise require a hacky solution.
For example, imagine we didn't care about cents.
You can adjust the number of decimal places shown with maximumFractionDigits
to 0
, and it just works.
Here's an example:
const usFormatterNoCents = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', maximumFractionDigits: 0, }); console.log(usFormatterNoCents.format(1234)); // Outputs: "$1,234"
I hope this short introduction shows you how useful the Intl.NumberFormat
object is. 🚀