40

I need to format a number like 1234567 as 1,234,567 but don't know how to do this. I tried using currency pipe of TypeScript but that gives USD or $ in front of the number. I want to remove that and format the number in this way 1,234,567. How can I do this?

9
  • 2
    I'm confused: if you don't want a currency prefix, why are you using the currency pipe? Is your real question "how do I format a number so that it has commas for every factor of one thousand"? Commented Nov 17, 2016 at 17:49
  • 1
    Possible duplicate of Currency Pipe in Angular 2
    – Aurora0001
    Commented Nov 17, 2016 at 17:52
  • @Mike'Pomax'Kamermans Yes i just need to format a number in this way 1,234,567 for 1234567. so, tried using currency pipe as it formatting the number in the same way i want but with usd prefixed.
    – suman
    Commented Nov 17, 2016 at 17:53
  • 1
    Possible duplicate of How to print a number with commas as thousands separators in JavaScript Commented Nov 17, 2016 at 17:57
  • That was also a hint for you to search for that instead - JavaScript has this built in already, you don't need angular or typescript to do this, so if you searched for "adding commas to number in javascript" you would have absolutely found the answer to this (using JS's toLocaleString()) Commented Nov 17, 2016 at 17:58

3 Answers 3

68

Just use the number (decimal) pipe instead.

To give an example:

{{ '1234567' | number:'1.0':'en-US' }}

will produce output 1,234,567.

If you do not change the default locale (by calling registerLocaleData() or providing LOCALE_ID), then simple {{'1234567' | number}} will work as well.

7
  • 13
    or even simpler, (123456789).toLocaleString(), because JavaScript has this built in =) Commented Nov 17, 2016 at 17:57
  • This is probably the best solution, but usage examples would be good to make this more useful than a link-only answer.
    – Aurora0001
    Commented Nov 17, 2016 at 17:59
  • 1
    @Aurora0001, example added. I haven't expected this question to get such engagement :) Commented Nov 17, 2016 at 18:06
  • 2
    @Mike, that's a very limited and unstable solution. For me (1234567).toLocaleString() produces 1 234 567. Even if the result was correct, I wouldn't use it in a serious project when better way is available. Commented Nov 17, 2016 at 18:09
  • 4
    @DanielKucal remember to add the local itself. (1234567).toLocaleString("en") if you need commas. With explicit locale, this is the most correct solution Commented Nov 17, 2016 at 22:03
17

The last answer will produce 1,234,567.00

Note the 2 decimals.

Use the following Pipe:

{{ element.total | number: '2.'}}

In order to produce 1,234,567

4
8

Per the official Angular documentation for the DecimalPipe, which is defined with the structure {{ value_expression | number [ : digitsInfo [ : locale ] ] }}, I was able achieve the desired number formatting by using:

{{ myValue | number:'':'en' }}

The empty string ('') causes the pipe to uses the default digitsInfo values for minIntegerDigits (1), minFractionDigits (0), and maxFractionDigits (3).

The locale being set to en causes the value to be displayed with commas marking the thousands, millions, etc. positions.

1
  • 1
    piggybacking on this {{ myVAlue | number }} also appears to work since the default locale is en-us. Commented May 30, 2019 at 23:57

Not the answer you're looking for? Browse other questions tagged or ask your own question.