Number Formatter
How it works
Each style is built on the browser's own Intl.NumberFormat / toLocaleString,
not hand-rolled grouping logic — US groups by thousands with a comma and a dot decimal, European
swaps those two, Indian groups by lakh and crore (2-digit groups after the first 3), and Space
uses French grouping, a narrow space between groups and a comma decimal. Scientific gives two
significant fraction digits in 1.23e+6 form, and Compact abbreviates to the nearest
thousand/million/billion, like 1.2M. The number itself is read as a string first and
converted once — see the precision note below for why that still has a limit.
Frequently asked questions
What does "Indian" grouping actually mean?
It groups by lakh (100,000) and crore (10,000,000) instead of by thousands: after the first three digits from the right, every remaining group is 2 digits rather than 3. 1,234,567 in US grouping is 12,34,567 in Indian grouping — same number, grouped where the local number names (lakh, crore) actually fall.
Why does a very large number look wrong after formatting?
JavaScript numbers are only exact up to 2^53 (9,007,199,254,740,991). Past that, a value is rounded to the nearest representable number before this tool ever sees it to format — so formatting one that large formats an already-approximate value, honestly, rather than pretending the extra digits survived.
What is compact notation for?
Compact notation ("1.2M", "3.4K") trades exactness for a label that reads in a glance — a dashboard tile, a chart axis, a stat card. "1,234,567" is the precise figure; "1.2M" is the same figure sized for a place where every character costs space.