NT
Number to Words Converter
Spell out any number in English words — negatives, decimals, and a dedicated currency mode.
More Text & Writing Tools
How to Use Number to Words Converter
Type any number — positive or negative, whole or with decimals — and see it instantly spelled out in English words using standard short-scale naming (thousand, million, billion, trillion). Switch on Currency mode to render the decimal part as "and NN/100" (as on a check) instead of speaking each decimal digit individually. Copy the result with one click.
About Number to Words Converter
Spelling a number out in words by hand is a small, repetitive task that shows up in a surprisingly wide range of contexts: writing a check (most banks still require or accept the amount spelled out in words as a fraud-prevention redundancy alongside the numeral), drafting a legal or financial document where numeric amounts are conventionally written out in full, writing a cheque number into an invoice template, or simply double-checking that you have read a large number correctly (is `1,000,000,000` a billion or a milliard? in short-scale English, always a billion). This tool automates that conversion for any number you type, live, as you type it.
English has two historical systems for naming large numbers — short scale (used in the US and, since the late 20th century, standard in the UK and most English-speaking countries: a billion is 10⁹, a trillion is 10¹²) and long scale (used in some European countries: a billion is 10¹²). This tool uses short-scale naming exclusively, since it is now the standard convention for English, and supports the full sequence thousand → million → billion → trillion → quadrillion → quintillion, comfortably covering the 15-digit integers explicitly required for a tool like this and well beyond — a plain 15-digit whole number sits solidly in the trillions, and this tool's scale table reaches two full steps past that.
The conversion works by treating the number as a plain digit string rather than converting it through JavaScript's native floating-point `Number` type for the actual word-building logic. This avoids a subtle but real class of bug: binary floating-point numbers cannot represent every decimal value exactly (the classic example being `0.1 + 0.2` not equaling exactly `0.3` in JavaScript, or any language using IEEE 754 floats), so an approach that parses your input into a `Number` and then tries to re-extract exact decimal digits from it can silently produce the wrong digits for certain values. Instead, the input string is validated with a regular expression, split on the sign, the decimal point, and then processed as plain digit groups: the integer part is chunked into groups of three digits from the right (thousands, millions, billions, and so on), each group of up to three digits is spelled out on its own ("one hundred twenty-three"), and the appropriate scale word is appended ("million", "billion", etc.) based on that group's position — exactly mirroring how you would read the number aloud yourself, one comma-separated group at a time.
Decimals are handled two different ways depending on the mode you choose, because "the right way to say a decimal" genuinely depends on what the number represents. In standard mode, each digit after the decimal point is spoken individually — `3.14` becomes "three point one four", not "three point fourteen" — which is the mathematically unambiguous convention (saying "fourteen" for `.14` could be misread as `.140` versus `.14` versus a totally different value depending on context, whereas reading each digit removes all ambiguity, which is exactly how numbers are conventionally read aloud in scientific and everyday contexts alike, e.g. reading out a phone number or a decimal measurement). Currency mode instead renders exactly two decimal digits as a "cents" fraction in the `and NN/100` format used on checks and financial documents — `123.45` becomes "one hundred twenty-three dollars and 45/100" — truncating (not rounding) to the first two decimal digits if more were entered, and correctly singularizing to "dollar" (not "dollars") when the whole-number part is exactly 1.
Negative numbers get a straightforward "negative" prefix (`-42.5` → "negative forty-two point five"), and zero is handled as an explicit special case rather than falling out of the general algorithm by accident, since the general group-by-group logic would otherwise produce an empty string for zero (there is no group to spell out when every digit is zero) — the tool checks for this and returns the word "zero" directly.
Details & Tips
How the integer part is converted: the digit string is split into groups of up to three digits from the right (`1005` → `1`, `005`; `1000000` → `1`, `000`, `000`). Each group is converted independently using a standard hundreds/tens/ones lookup (0-19 are irregular English words, 20-99 combine a tens word with a ones word joined by a hyphen, e.g. "forty-two"), and any group that is entirely zero contributes nothing to the output. Each non-zero group has its scale word appended based on its position counting from the right: position 0 has no scale word, position 1 is "thousand", position 2 is "million", position 3 is "billion", position 4 is "trillion", continuing through "quadrillion" and "quintillion" — enough headroom for integers well beyond the 15-digit requirement.
How decimals work in standard mode: every digit after the decimal point is looked up individually in a zero-through-nine word table and joined with the word "point", e.g. `.140` becomes "point one four zero" (trailing zeros are spoken, since they are part of what you typed and dropping them could change the implied precision of a measurement).
How decimals work in Currency mode: only the first two decimal digits are used (padded with a trailing zero if only one was entered, e.g. `.5` becomes cents `50`; truncated, not rounded, if more than two were entered), formatted as `and NN/100`. The whole-number part uses "dollar" (singular) only when it is exactly 1, and "dollars" (plural) for every other value including 0.
Handling negative numbers and zero: a leading `-` in the input is detected before any digit processing, stripped for the conversion itself, and the word "negative" is prepended to the final result. The digit string `0` (or an empty integer part, e.g. input `.5`) is special-cased to return the word "zero" directly, since the general group-based algorithm has nothing to output for an all-zero integer part.
Worked examples:
• `1005` → "one thousand five"
• `1000000` → "one million"
• `-42.5` (standard mode) → "negative forty-two point five"
• `123.45` (currency mode) → "one hundred twenty-three dollars and 45/100"
• `1.5` (currency mode) → "one dollar and 50/100"
• `0` → "zero"
What is out of scope: ordinal words ("first", "second" instead of "one", "two"), non-English number names, and long-scale naming (where "billion" would mean 10¹² instead of 10⁹) — this tool always uses short-scale English, the current standard convention.
Frequently Asked Questions
What naming system does this use for large numbers?
Short-scale English, where a billion is 10^9 and a trillion is 10^12 — the standard convention in modern English, used in the US, UK and most English-speaking countries. It does not use the long-scale system where "billion" means 10^12.
How large a number can this convert?
At least into the quintillions (10^18 and beyond), which comfortably covers the 15-digit integers this tool is built to handle correctly, with substantial headroom beyond that.
What is the difference between standard mode and Currency mode for decimals?
Standard mode speaks each decimal digit individually after the word "point" (3.14 → "three point one four"), which is unambiguous for any kind of decimal value. Currency mode instead renders exactly two decimal digits as "and NN/100" (123.45 → "...dollars and 45/100"), the format used on checks.
Does Currency mode round or truncate extra decimal digits?
It truncates to the first two decimal digits rather than rounding — for example 1.999 in currency mode uses only "99" as the cents value, not a rounded "100".
Why does 1.50 say "one dollar" but 2.50 says "two dollars"?
The singular "dollar" is used only when the whole-number part is exactly 1; every other value, including 0, uses the plural "dollars", matching standard English usage.
How are negative numbers handled?
A leading minus sign adds "negative" to the very front of the spelled-out result, e.g. -42.5 becomes "negative forty-two point five".
How is zero handled?
As an explicit special case that returns the word "zero" directly, since it is not produced naturally by the general group-based conversion logic used for non-zero numbers.
Does this tool use floating-point math that could lose precision on decimals?
No, the input is processed as a plain digit string throughout rather than being converted through JavaScript's floating-point Number type, which avoids the classic binary floating-point rounding issues (like 0.1 + 0.2 not exactly equaling 0.3) that could otherwise produce incorrect digits.
Can I convert ordinal numbers like "1st" or "2nd"?
No, this tool only converts cardinal numbers (one, two, three) — ordinal word forms (first, second, third) are not supported.
What happens if I type something that is not a valid number?
An inline error message explains that the input must be digits with an optional decimal point and an optional leading minus sign, and no result is shown until the input is corrected.
Does trailing zeros in the decimal part get spoken in standard mode?
Yes, every digit you typed after the decimal point is spoken individually, including trailing zeros — 3.140 is read as "three point one four zero", since dropping a typed trailing zero could misrepresent the precision of the original value.
Is my number sent to a server?
No, the entire conversion happens locally in your browser using JavaScript.
Part of These Collections
Also Available As
number to words, spell out number, number to words converter, convert number to text, currency in words, check writing amount in words
Found a Problem?
Let us know if something with Number to Words Converter isn't working as expected.
Something went wrong. Please try again.
Thanks — we'll take a look.