There are quite a few ways to format a number as a currency value in Javascript.

## Doing it yourself

The easiest of which is that of using the built-in `toFixed()` method.

Often times you will either have a string, integer or floating-point number (/double) and will need to output a value that looks like a currency.

So this: `12345.67120398` should become this: `12,345.67`.

Let’s take the following example:

 `````` 1 2 3 4 5 6 7 8 9 10 `````` ``````var yourBalance = 2489.8237; //returns 2489.824 (rounds up) yourBalance.toFixed(3); //returns 2489.82 yourBalance.toFixed(2); //returns 2489.8237000 (pads the decimals) yourBalance.toFixed(7); ``````

But what about formatting the “thousands”, or “millions” sections?

A winning `short and fast` solution would be to use the following:

 ``````1 2 3 4 `````` ``````// input: `12345.67` (12345.67).toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '\$&,'); // output: `12,345.67` ``````

If we run the above `short and fast` solution against a range of values, we can see how it plays out in the following output:

 ``````1 2 3 4 5 6 7 8 `````` ``````1 --> "1.00" 12 --> "12.00" 123 --> "123.00" 1234 --> "1,234.00" 12345 --> "12,345.00" 123456 --> "123,456.00" 1234567 --> "1,234,567.00" 12345.67 --> "12,345.67" ``````

This is pretty good, so let’s go one step further and create a more sophisticated prototype function we can use on all `Number` types:

 ``````1 2 3 4 5 6 `````` ``````Number.prototype.format = function(len, w_part, s_delim, c_delim) { var re = '\\d(?=(\\d{' + (w_part || 3) + '})+' + (len > 0 ? '\\D' : '\$') + ')', num = this.toFixed(Math.max(0, ~~len)); return (c_delim ? num.replace('.', c_delim) : num).replace(new RegExp(re, 'g'), '\$&' + (s_delim || ',')); }; ``````

Now we get to use our new Number prototype extension method:

 ``````1 2 3 4 5 6 7 8 `````` ``````12345678.9.format(2, 3, '.', ','); // "12.345.678,90" 12345678.9.format(0, 3, '-'); // "12-345-679" 123456.789.format(4, 4, ' ', ':'); // "12 3456:7890" ``````

## Using ECMAScript Internationalization API

There is a newer ECMAScript functionality provided by the Internationalization API.

 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 `````` ``````const formatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', minimumFractionDigits: 2 }) // "\$1,000.00" formatter.format(1000); // "\$10.00" formatter.format(10); // "\$1,234,567,890.00" formatter.format(1234567890); ``````

The same can be done for other currencies too.

You can explore it a bit here for the Intl.NumberFormat from Mozilla.