Learning counting is hard in every language. And the rules can be hard for native speakers to write down as well. It appears we just happen to know what's the right thing to say, and will be able to tell that something wrong simply "sounds wired". Below is an attempt to summarize the rules but definitely requires improvement.
Smaller, common numbers are best summarised in a table. Hard to learn but will be used a lot. I only used combinations of 0,1,2,8 and I hope the pattern is shown clearly. It's ordered in the hope that expression of the same format are grouped together. There're probably some mistakes and forgotten exceptions in the following list. And many special cases and alternative expressions are ignored.
- 1 一
- 8 八
- 10 十
- 11 十一
- 12 十二
- 18 十八
- 20 二十
- 80 八十
- 21 二十一
- 22 二十二
- 28 二十八
- 81 八十一
- 100 一百
- 200 二百
- 800 八百
- 101 一百零一
- 102 一百零二
- 108 一百零八
- 110 一百(一)十
- 111 一百(一)十一
- 112 一百(一)十二
- 118 一百(一)十八
- 120 一百二(十)
- 180 一百八(十)
- 280 二百八
- 128 一百二十八
- 821 八百二十一
- 1000 一千
Still quite commonly used in everyday life and relatively straight-forward.
First divide it into a/xxx, and say it like
a 千+ add 零 in the middle if xxx is smaller than 100 + how you would say xxx
- 2001 = 二千 / 零 / 一 (xxx=001<100)
- Only 1 零 is necessary, never use several consecutive 零s unless you are saying it as a year)
- 2020 二千 / 零 /二十 (xxx=020<100)
- 2021 二千 / 零 /二十一(xxx=021<100)
- 2100 二千 / / 一百 (xxx=100)
- 2821 二千 / / 八百二十一 (xxx=821>100)
- 10000 一万
- 80000 八万
- 20000 二万 (tricky, but this expression works)
10000 onwards if you are really interested
Break numbers into groups of 4.
First, say each group as you would according to previous sections.
Insert something in between:
兆 10^12 亿 10^8 万10^4
If the following group is smaller than 1000 (bold), add a 零 (one and only one) before it.
(NB Very unsure about this tricky bit, I think some 零 can be omitted)
Omit unnecessary part and follow the principle of no consecutive 零s
And for 872,0321,5421,0000
Notes and Thoughts
I belive that's way more than enough. I wrote the answer based on a computer programme I've written for this conversion, but we are humans. No idea why I went into such depths.
In daily life, we just pronounce each digit in order when we are lazy, forget about all the grammars. Or write it down in groups of four, or press it on a calculator, because there's no meaning in saying a large number aloud.
In written language, these official expressions are necessary for legal files or bank cheques for example.
For what exactly is going on in my mind when I read 321,0021,8010. I won't try to convert it at all. It'll remain as a number instead of a word in my mind. The only thought is "Woo, that's a large number". I won't think of English expression at all.