Numbers to Words Converter

Convert numerical values into English words. Supports cardinal (one, two, three), ordinal (first, second, third), currency (one dollar, twenty cents), and check format (ONE HUNDRED AND 50/100). Handles negative numbers, decimals, and very large numbers (up to decillions).

Text Tools
ProDentim Sponsored

When you need words for a number

Most contexts use numerical form — invoices say $1,234.56, not "one thousand two hundred thirty-four and 56/100". But there are places where the spelled-out form is required, recommended, or just more readable:

  • Bank checks. The "courtesy line" (the words) is what banks honor in case of mismatch with the digit amount. Required on every check.
  • Legal documents. Contracts often write important amounts both ways: "five thousand dollars ($5,000)" — the parenthetical confirms the words.
  • Accessibility. Screen readers read "1,234" as "one comma two three four" depending on the engine; writing out "one thousand two hundred thirty-four" can be clearer for some content.
  • Educational content. Math worksheets, language-learning materials.
  • Voice-driven systems. When generating speech, numbers usually need to be expanded.

The "and" question

Should you say "one hundred and twenty" or "one hundred twenty"? American English convention is to drop the "and" between hundreds and tens: one hundred twenty. British English includes it: one hundred and twenty.

In check-writing convention (US), the "and" is reserved for the decimal point — separating dollars from cents. One hundred twenty AND 50/100 dollars means $120.50. Putting "and" anywhere else on a check is technically wrong (though banks ignore the distinction).

This tool uses American English conventions: no "and" between hundreds and tens; "and" only on check-format output to separate the cents.

Edge cases this handles

  • Very large numbers. Up to vigintillion (10⁶³). Beyond that, real-world usage is essentially nonexistent — scientific notation takes over.
  • Negative numbers. Prefixed with "negative". -42 → "negative forty-two".
  • Decimals. Read after a "point". 3.14 → "three point one four". For currency, the integer and fractional parts are read separately.
  • Numbers with commas or spaces. Group separators are stripped. 1,234,567 and 1234567 give identical results.
  • Zero. Standalone zero is "zero". Zero cents in currency is "zero cents" or omitted depending on convention.
  • Ordinal suffixes. 1st = "first", 22nd = "twenty-second", 103rd = "one hundred third". The pattern is mostly cardinal + "th", with irregular forms for 1/2/3 family.

Implementing this in code

For JavaScript, the modern approach uses Intl.NumberFormat with the "spellout" locale — but support is uneven across runtimes. The reliable approach is a hand-rolled converter:

const ONES = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
const TEENS = ['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'];
const TENS = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'];
const SCALES = ['', 'thousand', 'million', 'billion', 'trillion'];

function toWords(n) {
  if (n === 0) return 'zero';
  if (n < 0) return 'negative ' + toWords(-n);
  if (n < 10) return ONES[n];
  if (n < 20) return TEENS[n - 10];
  if (n < 100) return TENS[Math.floor(n / 10)] + (n % 10 ? '-' + ONES[n % 10] : '');
  if (n < 1000) return ONES[Math.floor(n / 100)] + ' hundred' + (n % 100 ? ' ' + toWords(n % 100) : '');
  // ... recurse with scales for thousands and above
}
ProDentim Sponsored

Common use cases

Frequently asked questions

Why no "and" between hundreds and tens?

American English convention: "one hundred twenty", not "one hundred and twenty". British English does include the "and". For check-writing in the US, "and" is reserved for separating dollars from cents — putting it elsewhere is technically wrong (though banks accept either).

What's the largest number this handles?

Up to vigintillion (10⁶³). Beyond that, scientific notation is more practical and there's no universally agreed-upon naming convention. We use BigInt internally so there's no precision loss within the supported range.

How are decimals read?

In cardinal mode, after a "point" with each digit named: <code>3.14</code> → "three point one four". In currency mode, the cents portion is read as a whole number: <code>3.14</code> → "three dollars and fourteen cents".

What about ordinals like 22nd?

Ordinals follow English rules: cardinal plus "th", with irregular forms for the 1/2/3 family ("first", "second", "third") and the "ty" → "tieth" transformation ("twentieth", "fortieth"). So 22 = "twenty-second", not "twenty-twoth".

Related tools