静默的温柔
短路工程师/目前财产:0只狗

在英语中怎么描述数字呢? 例如1314520.可以翻译 one million three hundred and fourteen thousand five hundred and twenty.

拿上面的数字来举例.million是一百万,one million就显而易见罗.而我们看下面的,three hundred and fourteen thousand,直面翻译起来的意思是 314千(三百一十四千).奇怪,百万后面的单位不是万吗?怎么会是千,
这里就是英语中的数词单位与中文不同.英文中数词的单位是 百(hundred),千(thousand),百万(million),十亿(billion),所以万就是:ten thousand,十万:one hundred thousand,依次类推.下面贴出一些不同数字的翻译.

56               fifty six  
156             one hundred and fifty six (经典百位数读法,百位+单位+and+个位数)
2156           two thousand one hundred and fifty six      
32156          thirty two thousand one hundred and fifty six (千位数读法,单位使用thousand)
532156        five hundred and thirty two thousand one hundred and fifty six
4532156      four million five hundred and thirty two thousand one hundred and fifty six(百万,单位使用million)

那么问题来了,我想写个程序,能自动将阿拉伯数字转成英文,该怎么转呢?
任何能用电脑模拟人脑的程序都是有一定规律.仔细想想,任何事从一定角度看都是规律的.
多研究研究可以得出,是三个进位一分的,例如百(hundred),千(thousand),百万(million),十亿(billion)以三个为一组,可以这样拆一下 |1|314|520|.首位是百万,所以是one million. 百万后面是314,单位是千,是:three hundred  and fourteen thousand. 然后是百位数:five hundred and twenty.再把三组放在一起就是正确翻译了.其实唯一的区别只是后面单位不同,其他的按照百位数读法就好了呀.所以我一开始的思路是按照这样展开的.
1>考虑到英语中前20个数字都使用了不同的单词,以及100以内的零整之间也是不同的单词,所以需要先把所有用到的单词放在一个Map集合里面.



2>使用subString从输入的数字中从后往前截取三位数字,转化成百位数的读法,加上不同的单位.然后循环这一周目,直到循环到末尾终止循环.这里需要考虑的情况是:

   1.如果当前数字不足三位的情况,如|1|234|.
   2.当前数数位有0.如1000005(one million and five).以及数位之间为0和为空的影响.
   3.当前数十位以后是否存在特殊的单词.例如20在英语中作 twenty,30作thirty.
   4:最后二位位个数之前除了为0的情况一定要加"and".
   5:基本就这些,还有很多很多细节,写的时候就会碰到.
然后就大功告成啦.仔细测试一下还不错.



再来点难的:


写程序就是这样一点点探索,把大问题化小问题,化繁为简,耐心解决.不说了,老大在后面看着呢,这样玩不好,我要工作了.

posted on 2016-09-28 15:58  静默的温柔  阅读(3496)  评论(0编辑  收藏  举报