Introducing Song Creator Pro — create music with AI, locally on your device. Try it now →
TutorialJuly 9, 2026·7 min read

Why Text to Speech Reads Numbers and Dates Wrong (and How to Fix It)

Summarize this article with AISummarize

You paste a clean paragraph into a text to speech tool, hit generate, and the voice falls apart the moment it hits a number. The year 1984 comes out as "one thousand nine hundred eighty-four." A date reads as if it were a math problem. A price gets spelled out digit by digit. Everything around the numbers sounds great, and then the numbers break the whole take.

This is one of the most common complaints about AI voices, and it is almost never a bug in the voice itself. It is a text problem that happens before the model ever makes a sound. Understanding why makes it easy to fix.

Here is a sentence packed with the numbers, dates, and prices that break most tools, read the way you actually say them:

Hear it read correctly
"The 1998 edition sold 2,450,000 copies; reprinted on 2023-11-05, it now costs $19.99, ships in 3-5 days, and you can order 24/7 at 555-0142." Try Voice Creator Pro free in your browser

The real reason: the same characters mean different things

Turning written text into spoken words is called text normalization, and it is much harder than it looks. The reason is that written symbols are ambiguous. The exact same characters mean completely different things depending on the context around them, and a naive TTS engine has no way to tell which meaning you intended.

Here are the ambiguities that trip up almost every tool.

A four-digit number can be a year, a quantity, or a code.

  • 1984 is a year. A person reads it "nineteen eighty-four."
  • 1,984 with a comma is a quantity. A person reads it "one thousand nine hundred eighty-four."
  • 4021 on a door or a form is a code, read digit by digit as "four zero two one."

Three identical-looking numbers, three completely different spoken forms. A tool that picks one rule and applies it everywhere will be wrong most of the time.

A dollar sign is not always money.

  • $5 in a sentence about pricing is "five dollars."
  • $5 in a shell command, a regex, or a code snippet is not money at all. It is a variable or a positional argument, and reading "five dollars" there is nonsense.

A slash is not always a fraction.

  • a/b in a math context is "a over b."
  • and/or is just "and or." TCP/IP is "T C P I P." 24/7 is "twenty four seven."

Read every slash as a fraction and half your sentences turn into arithmetic.

A hyphen has at least four jobs.

  • In -5 it is a minus sign.
  • In well-known it is a hyphen you should not voice at all.
  • In pages 10-20 it is a range, read "pages ten to twenty."
  • In 555-0199 it is a separator in a phone number, read as digits.

When people say their TTS "reads a date as a subtraction," this is the culprit. The engine sees 2024-03-01, spots the minus signs, and reads "two thousand twenty four minus three minus one" instead of a date.

None of this means the model is bad. It means the model was handed ambiguous text and made the wrong guess. The fix is to resolve the ambiguity before the audio is generated, using the surrounding context. That is exactly what good text normalization does, and what most tools skip.

How Voice Creator Pro handles it: context-aware normalization

Voice Creator Pro runs context-aware text normalization before generation, so numbers, dates, and symbols are converted to their correct spoken form based on what is around them. It runs identically on the desktop app and in VCP Cloud, so you get the same reading everywhere. Here is what that looks like in practice.

It is year-aware. A bare four-digit number in the range 1100 to 2099 is read as a year, because in that range a year is overwhelmingly what people mean:

  • 1984 becomes "nineteen eighty-four"
  • 2000 becomes "two thousand"
  • 1905 becomes "nineteen oh-five"

With guards so it does not overreach:

  • 1,984 with a comma stays a quantity ("one thousand nine hundred eighty-four"), because the comma signals you meant an amount, not a year.
  • 2150 is outside the year range, so it reads as a cardinal number ("two thousand one hundred fifty") rather than a wrong-sounding year.

Large numbers are grouped, not spelled out digit by digit.

  • 1,000,000 becomes "one million"
  • 2,500 becomes "two thousand five hundred"

Decimals read digit by digit after the point, the way people actually say them.

  • 3.14 becomes "three point one four"
  • 0.5 becomes "zero point five"

ISO dates read as dates, not subtractions. 2024-03-01 becomes "March first, twenty twenty four" instead of a string of minus signs.

Prose is protected from over-conversion. The normalizer is deliberately conservative, so ordinary writing does not get mangled by an over-eager rule. The goal is to convert the things that are genuinely numeric and leave everything else alone, which is the failure mode you see when a tool turns and/or into a fraction.

The result is that the voice reads what you meant, and you do not have to hand-edit every number in your script before you generate.

Why the highlighting matches too

There is a second, quieter payoff. Voice Creator Pro stores the spoken form alongside the generated audio. So when you play a document back in the Reader with word-by-word highlighting, the highlight tracks what is actually said. When the voice says "nineteen eighty-four," the Reader highlights "nineteen eighty-four," not the raw "1984" on the page. That keeps the visual and the audio in sync, which matters a lot when you are following along with a long document or proofreading a script.

What to do if your current tool gets numbers wrong

If you are using a tool without solid normalization, you can force the correct reading by rewriting the ambiguous parts before you generate:

  • Write out years and amounts the way you want them heard when in doubt ("nineteen eighty-four", "one million").
  • Turn dates into words: 2024-03-01 becomes "March first, twenty twenty four."
  • Break phone numbers with spaces so they read as digits.
  • Replace a range hyphen with the word "to": "pages ten to twenty."
  • Spell out currency in-line if the tool mishandles it: "five dollars."

This works, but it is tedious on anything longer than a paragraph, which is the whole reason context-aware normalization exists. Numbers and dates are just one slice of the wider challenge covered in our overview of text to speech for complex text. For a deeper look at the kinds of documents where this matters most, see text to speech for financial reports, where numbers, currency, and dates appear on nearly every line. And for a first-party look at how twelve tools handle dense, symbol-heavy text, read our test of the best text to speech for research papers.

Try it yourself

The fastest way to see the difference is to paste a paragraph full of years, dates, and prices and listen to how it reads. Voice Creator Pro runs the same context-aware normalization on the desktop app (Windows and Mac, offline) and in VCP Cloud, so numbers come out right without hand-editing your script.

Try it free in your browser.

Try Voice Creator Pro for free

Also available on Windows and macOS. One-time purchase, unlimited generations.

Stay in the loop

Get Updates

Get notified about new features, platform launches, and updates. No spam, unsubscribe anytime.

No spam, ever. Unsubscribe anytime.

Frequently Asked Questions

Because a bare four-digit number is ambiguous, and a tool with weak normalization defaults to reading it as a plain cardinal number. `1984` becomes "one thousand nine hundred eighty-four" instead of "nineteen eighty-four." Voice Creator Pro is year-aware: a four-digit number in the 1100 to 2099 range is read as a year, so `1984` reads "nineteen eighty-four" and `2000` reads "two thousand."

Because it sees the hyphens in an ISO date like `2024-03-01` as minus signs and reads "two thousand twenty four minus three minus one." The engine has no date detection, so it treats the whole thing as arithmetic. Voice Creator Pro recognizes ISO dates and reads them as dates ("March first, twenty twenty four"). In a tool that gets this wrong, the workaround is to write the date out as words before generating.

Use a tool with context-aware text normalization, which converts numbers to their spoken form based on the surrounding text before generating audio. Voice Creator Pro does this automatically across desktop and web. If your tool does not, rewrite the ambiguous parts by hand: spell out years and amounts, turn dates into words, and replace range hyphens with the word "to."

Usually because the tool defaults to a digit-by-digit reading when it is unsure, or because a comma or format made it treat the number as a code rather than a quantity. A price like `$1,000,000` should read "one million," not ten separate digits. Voice Creator Pro groups large numbers ("one million", "two thousand five hundred") and reserves digit-by-digit reading for cases where it is correct, like decimals after the point and phone numbers.

Yes, if the tool distinguishes what a hyphen is doing. In a phone number the hyphen separates digit groups, so `555-0199` should be read as digits. In `pages 10-20` the hyphen is a range and should read "pages ten to twenty." A naive engine reads both as subtraction. Voice Creator Pro handles the hyphen by context rather than applying one rule everywhere.

Because the comma is a signal about what you meant. `1984` with no comma looks like a year and reads "nineteen eighty-four." `1,984` with a comma looks like an amount and reads "one thousand nine hundred eighty-four." Voice Creator Pro uses that signal on purpose: the comma is one of the guards that stops a four-digit number from being read as a year when you clearly meant a quantity.

Yes. Decimals are read the way people say them, digit by digit after the point, so `3.14` becomes "three point one four" and `0.5` becomes "zero point five." Large amounts are grouped rather than spelled out, so figures in a price or a report read naturally. There is more on this in text to speech for financial reports.

Because most tools highlight the raw text on the page while the audio speaks a normalized version, so the highlight lands on "1984" while the voice says "nineteen eighty-four." Voice Creator Pro stores the spoken form alongside the audio, so the Reader's word-by-word highlighting tracks what is actually said and stays in sync with the voice.

Back to Blog