Locale Number and Currency Formatter
See how a number or a price reads in each locale, including where the same digits mean different values.
About this tool
Formats a number, a price or a percentage the way each locale writes it, side by side.
**The same characters can be two different numbers.** `1,234` is one thousand two hundred and thirty-four in Britain, India and the United States, and one point two three four in Germany, France and Brazil. Seven characters, two values a thousand apart, and nothing on the page indicates which is meant.
**India groups differently.** Ten million is written `1,00,00,000` — lakhs and crores, not thousands. A site formatting for an Indian audience with a generic thousands separator produces numbers that read as wrong to everybody looking at them, and it never looks wrong to whoever built it.
Currency placement moves too: `£1,234.56` in Britain, `1.234,56 €` in Germany, with the symbol after the number and a space before it.
Formatting comes from the ICU data in PHP's intl extension. Where that is not installed the tool says so rather than falling back to a guess that looks like a formatted number.
Common questions
Why does 1,234 mean two different things?
Because the comma is a thousands separator in some locales and a decimal separator in others. Germany, France, Spain and Brazil all read 1,234 as one point two three four. It is the same string and a value a thousand times apart.
What is the Indian numbering system?
Grouping in lakhs and crores rather than thousands: after the first three digits, groups of two. Ten million is 1,00,00,000. Using a generic thousands separator for an Indian audience produces numbers that look wrong to every reader.
Where does the currency symbol go?
Before the number in Britain and the United States, after it with a space in most of continental Europe. Getting it wrong is a small signal that the page was not written for the reader, and small signals of that add up.
Should I format numbers server-side or in the browser?
Server-side, from the locale the page is served in — that way the formatting matches the language rather than the visitor's browser setting. Intl.NumberFormat is the client-side equivalent when you need it.