Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

numObj.toLocaleString([locales [, options]])

toLocaleString takes 2 arguments. The first is the locale, the second are the options. As for the options, you are looking for:

minimumFractionDigits

The minimum number of fraction digits to use. Possible values are from 0 to 20; the default for plain number and percent formatting is 0; the default for currency formatting is the number of minor unit digits provided by the ISO 4217 currency code list (2 if the list doesn't provide that information).

https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

To be able to set the options without setting the locale, you can pass undefined as first argument:

var num = 2046430;
num.toLocaleString(undefined, {minimumFractionDigits: 2}) // 2,046,430.00

However this also allows the fraction to be longer than 2 digits. So we need to look for one more option called maximumFractionDigits. (Also on that MDN page)

var num = 2046430.123;
num.toLocaleString(undefined, {
  minimumFractionDigits: 2,
  maximumFractionDigits: 2
}) // 2,046,430.12
                Also one more thing. You can do things like this for convenience reasons: jsfiddle.net/st31wm96/2 becaue it could be quite repetitive to always write this by hand.
– Sebastian Nette
                Jul 23, 2015 at 8:14
                this is not same as toFixed(2).. Example 33.6.toLocaleString(undefined, { minimumFractionDigits: 2,  maximumFractionDigits: 2 }) will be equal "33.6" not "33.60"
– Zalaboza
                Aug 20, 2021 at 9:53
                @Zalaboza, I just tested in the console and your example code does indeed show "33.60". The accepted answer works as expected.
– Tim Iles
                Nov 30, 2021 at 12:17
                toLocaleString('en-US', {                 minimumFractionDigits: 2,                 maximumFractionDigits: 2             })
– Samnad Sainulabdeen
                Apr 3 at 6:45

I came here because I would like to show the currency symbol (R$) in addition show two digits after the decimal point in the result.

Initially I was trying the following code:

`Amount ${(gas * litros).toFixed(2)
  .toLocaleString('pt-BR', {style: 'currency', currency: 'BRL'})}`

Expected output: Total a pagar R$ 20.95

Output: Total a pagar 20.95

So, with the answers above, I tried without the toFixed():

`Total a pagar ${(gas * litros)
    .toLocaleString('pt-BR', {style: 'currency', currency: 'BRL', minimumFractionDigits: 2})}`

Output: Total a pagar R$ 15,80

@Sebastian Nette's accepted answer was, for some reason not working for me to handle numbers like "1,230.05", where it was a string with a comma.

I ended up going with the following:

var num = "1,230.05";
parseFloat(num.replace(",", "")).toFixed(2);

It just manually strips the commas before parsing as a float and running toFixed().

It seems like you're solving a different problem. Sebastian starts with a number and formats it as a locale string with 2 digits after the decimal. Your answer starts with a locale string and formats it as a non-localized number with 2 digits after the decimal. – Brian Hannay Dec 12, 2022 at 17:27

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.