Why Text to Speech Reads Numbers and Dates Wrong (and How to Fix It)
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:
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.
1984is a year. A person reads it "nineteen eighty-four."1,984with a comma is a quantity. A person reads it "one thousand nine hundred eighty-four."4021on 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.
$5in a sentence about pricing is "five dollars."$5in 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/bin a math context is "a over b."and/oris just "and or."TCP/IPis "T C P I P."24/7is "twenty four seven."
Read every slash as a fraction and half your sentences turn into arithmetic.
A hyphen has at least four jobs.
- In
-5it is a minus sign. - In
well-knownit is a hyphen you should not voice at all. - In
pages 10-20it is a range, read "pages ten to twenty." - In
555-0199it 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:
1984becomes "nineteen eighty-four"2000becomes "two thousand"1905becomes "nineteen oh-five"
With guards so it does not overreach:
1,984with a comma stays a quantity ("one thousand nine hundred eighty-four"), because the comma signals you meant an amount, not a year.2150is 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,000becomes "one million"2,500becomes "two thousand five hundred"
Decimals read digit by digit after the point, the way people actually say them.
3.14becomes "three point one four"0.5becomes "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-01becomes "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 Voice Creator Pro for free
Also available on Windows and macOS. One-time purchase, unlimited generations.