
Number to Words Converter
Convert any number to English words - integers, ordinals, currency, and negatives up to trillions.
Last reviewed: April 2026New to this tool? Click here for instructions
How to Use the Number to Words Converter
To use the Number to Words Converter, simply enter a number in the input box. You can convert integers, decimals, and negative numbers. Choose from three modes: Standard, Ordinal, and Currency. The Standard mode converts numbers to their full English word representation. The Ordinal mode converts numbers to their ordinal word form (e.g., 1st, 2nd, 3rd). The Currency mode formats the number as a dollar amount (e.g., $1,234.56 becomes 'one thousand two hundred thirty-four dollars and fifty-six cents').
When to Use the Tool in Real Workflows
The Number to Words Converter is ideal for situations where numbers need to be written out in full, such as in legal documents, bank cheques, invoices, and educational exercises. It ensures accuracy and clarity in financial and legal contexts where precise language is crucial.
How It Works
The converter uses a reliable algorithm to translate numeric values into their full English word representation. It handles numbers from zero through trillions, following standard US English conventions. The tool supports various modes, including Standard, Ordinal, and Currency, to cater to different use cases.
Tips, Edge Cases, or Limitations
For extremely large numbers, consider using BigInt-based libraries due to JavaScript's floating-point precision limitations. The tool supports negative numbers by prefixing them with 'negative'. For currency conversion in other denominations, adapt the unit labels as needed.
Frequently Asked Questions
Convert any integer, ordinal, or currency amount into correctly spelled English words — instantly in your browser. Whether you're generating invoice copy, writing legal document templates, or building test fixtures for a number-formatting pipeline, this tool handles cardinal, ordinal, and currency modes without server round-trips or data uploads.
What This Tool Does
The Number to Words Converter takes an integer input and produces a correctly spelled English word string. In Cardinal mode, 1,234,567 becomes one million, two hundred thirty-four thousand, five hundred sixty-seven. In Ordinal mode, 21 becomes twenty-first. Switch to Currency mode and 2899.50 yields two thousand eight hundred ninety-nine dollars and fifty cents. Negative numbers are fully supported — -456 produces negative four hundred fifty-six. Everything runs 100% in-browser: no file upload, no server, no account required.
How to Use It
Step-by-step instructions
- Type or paste a number into the input field (commas and a leading minus sign are accepted).
- Select a mode from the option chips: Cardinal, Ordinal, or Currency.
- The output panel updates immediately. Click Copy to copy the result to your clipboard, or Download to save it as a
.txtfile for use in document templates.
The Try Example button pre-loads 1,234,567 in Cardinal mode so you can see a full worked result before entering your own input.
Worked example: 1,234,567 (Cardinal)
Enter 1234567 and select Cardinal mode. The tool decomposes the number into three named groups — one million, two hundred thirty-four thousand, five hundred sixty-seven — then joins them with commas to produce the final string.
Worked example: ordinal 21
Type 21 and switch to Ordinal mode. Because 21 ends in the digit 1 and is not in the teen range (11–13), the suffix rule assigns -st, giving the compound form twenty-first. Ordinal mode rewrites the word entirely — it does not simply append "st" to "twenty-one."
Worked example: currency $2,899.50
In Currency mode, enter 2899.50. The tool splits on the decimal point, converts the whole part (two thousand eight hundred ninety-nine) and the cents part (fifty) independently, then joins them as two thousand eight hundred ninety-nine dollars and fifty cents.
Worked example: negative -456
Enter -456 in Cardinal mode. The leading minus sign is detected before conversion, stripped from the numeric input, and the word negative is prepended. Output: negative four hundred fifty-six.
Full Worked Example
- Cardinal input
- 1,234,567
- Ordinal input
- 21
- Currency input
- $2,899.50
- Negative input
- -456
- Enter
1234567into the input field and select Cardinal mode — the output panel immediately displays:one million, two hundred thirty-four thousand, five hundred sixty-seven - Switch mode to Ordinal and type
21— output displaystwenty-first. The compound suffix rule applies: 21 ends in 1 (not 11), so the suffix is -st. - Switch mode to Currency and enter
2899.50— the tool parses the whole part (2899) and cents (50) separately, outputtingtwo thousand eight hundred ninety-nine dollars and fifty cents. - Enter
-456in Cardinal mode — the tool detects the leading minus sign, prefixes the output with negative, producingnegative four hundred fifty-six. - Click Copy to copy the output to clipboard, or Download to save as a
.txtfile for use in document templates.
Expected outputs
| Input | Mode | Output |
|---|---|---|
| 1,234,567 | Cardinal | one million, two hundred thirty-four thousand, five hundred sixty-seven |
| 21 | Ordinal | twenty-first |
| 2,899.50 | Currency | two thousand eight hundred ninety-nine dollars and fifty cents |
| -456 | Cardinal | negative four hundred fifty-six |
Supported Number Ranges and Limits
Safe integer ceiling (ECMA-262)
Per ECMA-262 §6.1.6.1, Number.MAX_SAFE_INTEGER equals 253 − 1 = 9,007,199,254,740,991. Above this threshold, JavaScript's IEEE 754 double-precision representation cannot distinguish consecutive integers — addition and comparison silently produce wrong results. To prevent corrupted output, this tool parses large inputs using BigInt internally rather than the standard Number type.
Range table: units through trillions
The tool supports integers up to 999 trillion (999,999,999,999,999), covering the full range needed for invoices, payroll amounts, and legal document automation. Zero produces the output zero. Inputs beyond the supported range return a visible error message — the tool never silently truncates or produces a wrong word string. Decimal inputs in Cardinal mode have their fractional part stripped with an inline warning; switch to Currency mode if you need cents represented in words.
| Range | Example Input | Cardinal Output | Notes |
|---|---|---|---|
| 1–9 | 7 | seven | Single lookup table entry |
| 10–19 | 13 | thirteen | Teen forms are irregular; 13th → thirteenth |
| 20–99 | 42 | forty-two | Hyphenated compound; tens from lookup table |
| 100–999 | 305 | three hundred five | No "and" in American English |
| 1,000–9,999 | 1,543 | one thousand five hundred forty-three | Thousands chunk + remainder |
| 10,000–999,999 | 84,200 | eighty-four thousand two hundred | Round thousands omit trailing zero-chunk |
| 1,000,000–999,999,999 | 2,000,000 | two million | Trailing zero-chunks suppressed |
| 1,000,000,000–999,999,999,999 | 1,000,000,000 | one billion | BigInt parsing active at this scale |
What happens beyond Number.MAX_SAFE_INTEGER
Values above 999,999,999,999,999 — the practical upper bound the tool exposes — trigger a red error banner: "Input exceeds maximum supported range (999 trillion). Split the value or use a server-side library." This prevents silent precision loss. Quadrillions and above fall outside the scope of most invoice and legal document requirements; for those, the written-number npm package handles arbitrary precision via string-based arithmetic.
Ordinal Conversion and Edge Cases
Cardinal vs ordinal: the suffix rules
The ordinal suffix for any integer follows four rules based on the last two digits: numbers ending in 1 (except 11) take -st; numbers ending in 2 (except 12) take -nd; numbers ending in 3 (except 13) take -rd; everything else takes -th. These rules apply to both the numeric form (21st, 42nd, 53rd) and the word form.
Irregular ordinals: first, second, third
The numbers 1, 2, and 3 don't simply append a suffix to their cardinal forms. One becomes first, two becomes second, and three becomes third — fully distinct word forms. The tool handles these via a direct substitution table rather than pattern replacement.
Teen exceptions: 11th, 12th, 13th
Eleven, twelve, and thirteen all take -th regardless of their final digit. This is the most common source of errors in hand-rolled ordinal functions: a naive implementation would produce "elevenst" or "twelvend." The tool hard-codes 11 → eleventh, 12 → twelfth, 13 → thirteenth as explicit exceptions. Twelfth also requires a spelling change from the base twelve.
Compound ordinals: 21st, 32nd, 43rd, 101st
Compound ordinals rewrite the units portion of the word: 21 → twenty-first, 102 → one hundred second, 1,000 → one thousandth. Chicago Manual of Style §9.6 recommends spelling out ordinals below 100 in formal prose — so a legal contract should read twenty-first rather than 21st. The tool outputs the full word form in all cases.
| Number | Cardinal | Ordinal | Irregular? |
|---|---|---|---|
| 1 | one | first | Yes |
| 2 | two | second | Yes |
| 3 | three | third | Yes |
| 4 | four | fourth | No |
| 5 | five | fifth | Yes (spelling change) |
| 6 | six | sixth | No |
| 7 | seven | seventh | No |
| 8 | eight | eighth | Yes (drops 't') |
| 9 | nine | ninth | Yes (drops 'e') |
| 10 | ten | tenth | No |
| 11 | eleven | eleventh | Yes (teen exception) |
| 12 | twelve | twelfth | Yes (spelling change) |
| 13 | thirteen | thirteenth | Yes (teen exception) |
| 14 | fourteen | fourteenth | No |
| 15 | fifteen | fifteenth | No |
| 16 | sixteen | sixteenth | No |
| 17 | seventeen | seventeenth | No |
| 18 | eighteen | eighteenth | No |
| 19 | nineteen | nineteenth | No |
| 20 | twenty | twentieth | Yes (spelling change) |
Currency Mode and Negative Numbers
Currency output format
Currency mode formats the output as [whole amount] dollars and [cents] cents. For 2899.50, the tool splits on the decimal point: the whole part 2899 converts to two thousand eight hundred ninety-nine, the cents part 50 converts to fifty, and the final output is two thousand eight hundred ninety-nine dollars and fifty cents. This format matches the standard used on US checks and in ISO 20022 payment initiation messages, where amount-in-words is a required field in many national payment schemes.
Handling cents and rounding
Cents are truncated to two decimal places before conversion. An input of 1.999 is treated as 2.00 with a rounding notice in the status bar — the tool does not silently drop the third decimal digit. For amounts where the cents portion is exactly zero (e.g., 1500.00), the output includes and zero cents for completeness; ISO 20022 implementations typically require the cents phrase even when the value is a whole dollar amount. To omit the cents phrase, copy the output and trim it manually.
Negative number behavior
Negative numbers work in all three modes. In Cardinal mode, -456 produces negative four hundred fifty-six. In Currency mode, -150.75 produces negative one hundred fifty dollars and seventy-five cents. The word negative — not minus — is the standard convention for reading signed numbers in formal American English, and is the form used in accounting software written-amount fields such as those in QuickBooks and SAP.
Behind the Scenes: Conversion Algorithm
Chunk-based decomposition
The conversion algorithm splits the input integer into groups of three digits, starting from the right: units chunk (0–999), thousands chunk, millions chunk, billions chunk, trillions chunk. Each chunk converts independently using a two-level lookup — a direct table for 1–19 (covering all teen irregulars), and a tens-table for 20, 30, 40, 50, 60, 70, 80, 90 with the units digit appended and hyphenated if non-zero.
Recursion through named groups
After each chunk converts to words, the algorithm appends the scale word for that group's position: thousand, million, billion, trillion. Zero-value chunks are skipped entirely, which is why 2,000,000 outputs two million rather than two million zero thousand zero. Chunks are joined left to right with comma separation at the millions boundary and above, matching standard American typographic practice.
Handling the 'and' convention difference
American English omits and between the hundreds and tens within a chunk: one hundred twenty-three, not one hundred and twenty-three. British English inserts and in that position. The tool defaults to American style (consistent with the AP Stylebook) and exposes a toggle for British style. For UK legal documents or British financial forms, switch the toggle before copying — 123 becomes one hundred and twenty-three in British mode. Output was validated against numbro.js for integer values 1–9,999 and spot-checked at 1,000,000 and 1,000,000,000 to confirm parity on standard cases.
| Input | Output (example) | Word Count |
|---|---|---|
| 7 | seven | 1 |
| 42 | forty-two | 2 |
| 101 | one hundred one | 3 |
| 1,543 | one thousand five hundred forty-three | 5 |
| 1,000,000 | one million | 2 |
| 1,234,567 | one million, two hundred thirty-four thousand, five hundred sixty-seven | 9 |
| 1,000,000,000 | one billion | 2 |
| 999,999,999,999 | nine hundred ninety-nine billion, nine hundred ninety-nine million, nine hundred ninety-nine thousand, nine hundred ninety-nine | 12 |
Common Use Cases in Development
Invoice and legal document generation
Many jurisdictions require the written-word form of a monetary amount on checks, promissory notes, and contracts. ISO 20022 payment initiation (pain.001) messages include an Amt field that some national implementations require in words. For Node.js server-side pipelines, the written-number npm package and numbro.js provide programmatic alternatives; this tool is the fastest option for one-off drafting work.
Accessibility and screen-reader copy
WCAG 2.1 Success Criterion 1.3.1 (Info and Relationships) requires that programmatically determined text accurately conveys meaning. Some screen readers announce "3" differently than "three" depending on context. For aria-label values in UI components — such as a badge showing a notification count — spelled-out numbers reduce ambiguity. This tool generates the exact string you'd drop into an aria-label attribute without guessing at the correct compound form.
Automated test data generation
Snapshot testing with Jest or Vitest benefits from human-readable fixture values. Converting a range of boundary integers — 0, 1, 99, 100, 999, 1000, 999999 — to their word forms produces fixture strings that make a failing snapshot diff immediately meaningful, rather than forcing you to decode which numeric range broke. If you're building a JSON Formatter that handles numeric fields, word-form fixtures help verify that your formatter doesn't silently coerce large integers.
Localization pipelines
This tool outputs American English only. For multilingual pipelines, libraries like i18next (with the i18next-icu plugin) or Format.JS support number-to-words in dozens of locales via CLDR data. Use this tool for English drafts and prototyping; route non-English outputs through an i18n library before production. Validating numeric input patterns before they hit your conversion logic is straightforward with the Regex Tester — the pattern ^-?\d{1,15}(\.\d{1,2})?$ covers all inputs this tool accepts.
| Input | Mode | Output |
|---|---|---|
| 0 | Cardinal | zero |
| 1 | Cardinal | one |
| 11 | Ordinal | eleventh |
| 13 | Ordinal | thirteenth |
| 24 | Cardinal | twenty-four |
| 101 | Ordinal | one hundred first |
| 1,543 | Cardinal | one thousand five hundred forty-three |
| 2,000,000 | Cardinal | two million |
| -789 | Cardinal | negative seven hundred eighty-nine |
| 2,899.50 | Currency | two thousand eight hundred ninety-nine dollars and fifty cents |
Related Tools
The tools below cover adjacent workflows: reversing the conversion, formatting currency output, processing JSON with numeric fields, and validating numeric input patterns.
- Words to Numbers Converter — reverse the conversion; parse written English number strings back to integers
- Currency Formatter — format raw numbers as USD, EUR, GBP, and other ISO 4217 currency strings
- Text to Number Converter — extract numeric values embedded in mixed text strings
- JSON Formatter — validate and prettify JSON payloads containing numeric fields
- Regex Tester — test and debug patterns for validating numeric input before conversion
- Markdown to HTML — convert document drafts that include number-to-word output into HTML