Locale Number Formatter

Format a number for any locale: separators, currency, percent, compact notation and units, compared across 20 locales.

Formatted 1,234,567.891

More options
Intl.NumberFormat snippet

The same number in 20 locales

Locale Tag Formatted Copy
English (United States) en-US โ€”
English (United Kingdom) en-GB โ€”
English (India) en-IN โ€”
German (Germany) de-DE โ€”
German (Switzerland) de-CH โ€”
French (France) fr-FR โ€”
Spanish (Spain) es-ES โ€”
Portuguese (Brazil) pt-BR โ€”
Italian (Italy) it-IT โ€”
Dutch (Netherlands) nl-NL โ€”
Swedish (Sweden) sv-SE โ€”
Polish (Poland) pl-PL โ€”
Russian (Russia) ru-RU โ€”
Turkish (Turkiye) tr-TR โ€”
Arabic (Egypt) ar-EG โ€”
Hindi (India) hi-IN โ€”
Japanese (Japan) ja-JP โ€”
Chinese (China) zh-CN โ€”
Korean (South Korea) ko-KR โ€”
Indonesian (Indonesia) id-ID โ€”
No uploads. Your files stay on your device.

Free forever, no sign-up, no cookies. Buy me a coffee

How it works

Type a number, pick a locale, and the value is formatted with the browser's own Intl.NumberFormat โ€” the ECMA-402 internationalization API, backed by the Unicode CLDR data that ships with your browser. No separator table is hand-written here, so what you see is exactly what new Intl.NumberFormat(locale, options).format(value) returns in production code: group and decimal separators (1,234.5 in en-US, 1.234,5 in de-DE, 12,34,567.891 in en-IN), currency placement and symbols, percent, compact notation such as 1.2M, scientific and engineering notation, and CLDR units like kilometers or megabytes.

The panel underneath shows the same value with the same options across 20 locales at once, which is the fastest way to spot a layout that breaks when a French visitor sees a narrow no-break space where an American saw a comma. The line under the result names the exact separator characters, including invisible ones such as U+00A0 (no-break space) and U+202F (narrow no-break space) โ€” the usual culprit when a string comparison or a CSV import fails. Copy the result, copy the ready-to-paste JavaScript snippet, or download the comparison as CSV. Everything runs locally in your browser: no signup, no ads, and the number you type is never sent anywhere.

Frequently asked questions

How do I format a number for a specific country?

Type the number and pick a locale. The tool formats it with the browser's own Intl.NumberFormat, so 1234567.891 becomes 1,234,567.891 in en-US, 1.234.567,891 in de-DE and 12,34,567.891 in en-IN, where digits group by lakh and crore instead of by thousands. The table underneath shows the same value in 20 locales at once.

Why does my formatted number contain a strange space?

Several locales group digits with an invisible space rather than a comma or a dot. French uses a narrow no-break space (U+202F), many others use a no-break space (U+00A0), and Swiss German uses an apostrophe (U+2019). The line under the result names the exact characters in use, which is usually the answer when a string comparison or a CSV import fails.

Where does the formatting come from, and is my number uploaded?

It comes from ECMA-402 Intl.NumberFormat and the Unicode CLDR data that ships with your browser. No separator table is hand-written here, so the output matches what your production JavaScript returns, and you can copy the ready-made snippet. Everything runs locally in your browser with no signup and no ads, so the number you type is never sent anywhere.

Report a bug