Free Number to Words Converter
Convert any number to words in English, Vietnamese, Polish, Turkish, Spanish, Portuguese, French, German, Russian and 7 more languages: cardinal numbers, currency amounts and cheque wording.
Common uses
- Write Numbers on Cheques and Legal DocumentsConvert amounts to written words for cheques, money orders, and legal contracts where written amounts are required.
- Write Numbers in Words for Educational MaterialsConvert numbers to written English for worksheets, educational content, and language-learning materials.
- Write Invoice Amounts in WordsConvert invoice totals to written words for international invoices, purchase orders, and payment requests.
- Spell Out Numbers for Writing and PublishingFollow style guide rules by converting numbers to words for essays, articles, books, and professional writing.
- Numbers in Words for Accessibility and Screen ReadersGenerate written-out number strings for accessible content, ARIA labels, and screen reader compatibility.
How It Works
This converter uses a hand-written algorithm — no library, no API call. The entire conversion runs in your browser using three static lookup tables (ones, tens, and scale words like "thousand", "million") and a chunking loop that breaks any integer into groups of three digits and assembles the English phrase locally.
- 1Input parsing and sign detectionThe tool strips commas, checks for a leading minus sign, and validates the input against a simple digit regex. It also uses BigInt to catch numbers above Number.MAX_SAFE_INTEGER (9,007,199,254,740,991) before JavaScript's floating-point precision would silently corrupt the result.
- 2Three-digit chunking with scale wordsThe integer part is repeatedly divided by 1,000, and each remainder (0–999) is converted via a hundreds-tens-ones lookup. Each chunk is then prefixed with its scale word from the SCALES array ('thousand', 'million', 'billion', 'trillion', 'quadrillion') and the chunks are joined with commas.
- 3Mode-specific post-processingDepending on the selected mode, the word string is transformed: ordinal mode applies a hard-coded suffix map to the last word (e.g. 'twenty-one' becomes 'twenty-first'); currency mode looks up the major and minor unit names for the chosen currency (USD, GBP, EUR, INR, JPY, CAD, AUD) and rounds the decimal part to the nearest cent; check/legal mode formats the output as 'One thousand two hundred thirty-four and 56/100 dollars'.
- 4Result displayed and copied in-browserThe converted string is recalculated on every keystroke via React's useMemo — there is no network request. Clicking Copy writes the result to the clipboard using the browser's navigator.clipboard API.
Guide
Worked example
The box opens with 1234 and the result reads "One thousand, two hundred thirty-four". Press "Currency" with USD selected and type 1234.56: the result is "One thousand, two hundred thirty-four dollars and fifty-six cents", and a note below it begins "Amount used: $1,234.56". Press "Check writing" and the same amount reads "One thousand two hundred thirty-four and 56/100 dollars", with the commas left out, the way a cheque line is written. Tick "Add "only" at the end" to finish it with "only". Press "Ordinal" and type 21 to get "Twenty-first". "Batch (one per line)" does the same for a pasted list.
Which settings to use, and the limits
- Pick the mode that matches the job. "Cardinal" reads the number as it stands and reads a decimal part digit by digit, so 12.05 becomes "Twelve point zero five". "Ordinal" gives "Twenty-first" for 21 and "One millionth" for 1000000, and it is offered only when the language is English. "Currency" names the money and rounds to the nearest minor unit, so 1.995 in dollars is "Two dollars". "Check writing" writes the cents as a fraction ("and 56/100") and drops the commas between groups. A currency with no minor unit, such as JPY, is rounded to a whole number.
- Match the English style of your document. The checkbox "British "and" (one hundred and twenty-one)" turns 121 into "One hundred and twenty-one" and 1001 into "One thousand and one". "Commas between groups" and "Hyphenate (twenty-one)" are on at the start; with hyphens off, 21 reads "Twenty one". "Lakh / crore wording" turns 12345678 into "One crore, twenty-three lakh, forty-five thousand, six hundred seventy-eight", and it switches itself on for INR in Currency and Check writing until you tick or untick it yourself. "Letter case" offers "Sentence case", "Title Case", "UPPERCASE" and "lowercase".
- Choose the currency, or name your own. The "Currency" menu appears in Currency and Check writing. For English it lists 19 codes, from USD, GBP and EUR to INR, JPY, CHF and ZAR. "Custom…" opens "Currency name (e.g. bitcoin)" and "Minor unit (optional, e.g. satoshi)", each limited to 40 characters. With bitcoin and satoshi, 1234.56 reads "One thousand, two hundred thirty-four bitcoin and fifty-six satoshi". A custom name is never made plural, an empty name becomes "units", and with no minor unit the amount is rounded to a whole number.
- Type the number the way you have it. "1,234.56" and "1.234,56" both mean 1234.56: when both signs appear, the last one is the decimal mark. A single comma with exactly three digits after it and one to three before it is a thousands mark ("1,234"); otherwise it is a decimal mark ("1,5"). In English a single dot is always a decimal point, but in German or other languages that write 1.234,5 it is a thousands mark, so 10.000 is ten thousand. Spaces, apostrophes and underscores are ignored, a leading + or - is accepted, and Arabic-Indic, Persian and full-width digits are converted. English takes up to 36 digits before the point.
- Convert a list in Batch mode. Press "Batch (one per line)" and paste one number per line under "Numbers, one per line". Each line uses the same mode, language, currency and style settings as the single box, and the page reports a count such as "4 lines converted", followed by " · 1 line could not be converted" if a line failed. Unreadable lines show "Not a valid number" in red. "Copy all" copies the words one per line, and "Download CSV" saves number-to-words.csv with the columns "number" and "words". Only the first 5,000 non-empty lines are read.
- Change the language of the words. The "Language" menu lists English and 19 other choices, among them Deutsch, Español, Français in three regional forms, Português in two, Tiếng Việt in two, 日本語, 한국어 and فارسی. A page in one of these languages starts in that language. "Ordinal" is English only, so that button disappears in the others. Each language has its own currency list and digit limit, for example 21 digits for German and 27 for Vietnamese. "Share result" copies a link that carries the number, plus the mode, currency and language when you changed them.
Common problems and how to fix them
- It says "Enter a valid number (digits with an optional decimal point or comma, e.g. 1,234.56 or 1.234,56)".
- The text is not a plain number. Letters and signs such as $ or € are refused. So are scientific notation like 1e3, a second decimal point as in 1.2.3, and any grouping that is not in threes. That last rule catches Indian-style commas such as 12,34,567: type 1234567 or 1,234,567 instead, and tick "Lakh / crore wording" to get lakh and crore in the words. In "Batch (one per line)" the same lines show "Not a valid number" instead.
- It says "Number too large (max: 36 digits, up to decillions)".
- English stops at 36 digits before the decimal point. In another language the message reads "Number too large (max: 21 digits in this language)" with that language's own limit. In Currency and Check writing the digits are counted after rounding, so a number close to the limit can tip over. Remove digits, or split the number and convert the parts one at a time.
- It says "Ordinal numbers need a whole number. Remove the decimal part, or switch to Cardinal."
- "Ordinal" cannot say "second point five". A decimal part that is not all zeros triggers the message, so 2.5 fails while 2.0 gives "Second". Delete the decimals, or press "Cardinal" to read the whole number with its decimals. Currency and Check writing take decimals, because they treat them as cents.
- I typed 1.500 and it says "One point five zero zero", not fifteen hundred.
- On an English page a single dot is a decimal point, and a single comma is a thousands mark only when exactly three digits follow it. Type 1,500 for fifteen hundred, or switch "Language" to one that writes 1.500 with a dot, such as Deutsch, where it reads as 1500. A leading zero changes the rule too: 0,500 is read as a decimal, never as five hundred.
- The words say "Zero dollars" for an amount I typed, and the note says "Amount used: $0.00".
- Currency and Check writing round to the nearest minor unit first, so 0.004 becomes 0.00 and 1.995 becomes 2.00. Type at least 0.005 for a cent to appear. The "Amount used" line under the result always shows the rounded figure that was actually spelled out, so check it before you copy the words onto an invoice. A negative sign is dropped when the rounded amount is zero.
How it compares
This tool only turns a number into words. It does not know your bank's house style, your country's rules for cheques, or whether the amount on a document is correct, so read the result against the convention you must follow. Writing the words by hand is fine for a few round amounts, but long numbers, cents and lakh or crore grouping are where slips happen. English covers up to 36 digits and 19 currencies plus your own. The tool does not read fractions such as 1/2 or Roman numerals.
Related Tools
Lakh Crore Converter
Convert between lakh, crore, arab and million, billion, trillion — and spell any amount in Indian-English words with rupee phrasing for cheques.
Add Page Numbers to PDF
Add page numbers to a PDF — choose the format, position, starting number, and font size. Runs entirely in your browser; the PDF is never uploaded.
Chinese Zodiac Calculator
Find your Chinese zodiac animal and element (with the correct Lunar New Year boundary), your Western star sign, and your numerology life-path number — from your birth date. Free, private, for fun.