# How to format a number as a currency string in JavaScript

By Atta Ur Rehman Shah (https://attacomsian.com/about). Published Aug 7, 2022. Topics: JavaScript.
Canonical URL: https://attacomsian.com/blog/javascript-format-number-as-currency-string

> A quick guide to Learning how to use the JavaScript Internationalization API to format a number as a currency string.

The easiest and the most popular way to format numbers to currency strings in JavaScript is by using the Internationalization API. It provides methods for language-sensitive string comparison, number formatting, and the date and time formatting.

One of these methods is `Intl.NumberFormat()`, which lets us format numbers using a locale of our own choice. 

The `Intl.NumberFormat()` constructor accepts two parameters. The first parameter is the locale string like `en-US` or `de-DE`. The second parameter is an object to specify the options you want to apply while formatting: 

```javascript
const formatter = new Intl.NumberFormat('en-US', {
  style: 'currency',
  currency: 'USD',
  minimumFractionDigits: 2,
  maximumFractionDigits: 2
})

console.log(formatter.format(100)) // $100.00
console.log(formatter.format(1255.786)) // $1,255.79
console.log(formatter.format(14567890)) // $14,567,890.00
```

In the options object, the `style` property is used to specify the type of formatting. It has the following possible values:

* `decimal` for plain number formatting.
* `currency` for currency formatting.
* `unit` for unit formatting.
* `percent` for percent formatting.

The default `style` property value is `decimal`. In the above example, we used `currency` to format the number as a currency string.

The `currency` property lets you define the currency to use in currency formatting, such as `USD`, `EUR`, or `CAD`.

Finally, the `maximumSignificantDigits` and `maximumSignificantDigits` properties set minimum and maximum fraction digits to use while formatting.

That being said, let us write a generic function that accepts a number value, an optional currency, locale, minimum, and maximum fraction digits and returns a formatted currency string:

```javascript
const currency = (amount, currency = 'USD', locale = 'en-US', minfd = 2, maxfd = 2) => {
  return new Intl.NumberFormat(locale, {
    style: 'currency',
    currency: currency,
    minimumFractionDigits: minfd,
    maximumFractionDigits: maxfd
  }).format(amount)
}
```

Now we can use the above `currency()` method to format any number into a currency string:

```javascript
console.log(currency(100)) // $100.00
console.log(currency(14567890, 'CAD')) // CA$14,567,890.00
console.log(currency(1255.786, 'EUR', 'de-DE')) // 1.255,79 €
```
