日常遇到的中文数字主要有两种情况:
1.“二零零一”这种类型,只包含[0-9]对应的十个中文字,需要转换成数字:2001。这种情况的转换十分简单。
2. “三百二十一”这种类型,还有“十百千万亿……”等汉字,需要转换成数字:321,这种情况比较复杂。
考虑:
1. “四千三百二十一”,即万以内的数字,转换的思路是:4*1000+3*100+2*10+1
2. “四千三百二十一万”,转换的思路是:(4*1000+3*100+2*10+1)*10000 。
3. 通过递归,依次对字符串兆、亿、万前后切片,并作相应处理。
1 # 中文数字包含的汉字与其对应的阿拉伯数字构成的字典。字典也可以进一步扩展为支持伍、陆、柒这些汉字 2 dic = {"0":0,"零":0,"一":1,"二":2,"三":3,"四":4,"五":5,"六":6,"七":7,"八":8,"九":9,"十":10,"百":100,"千":1000,"万":10000,"亿":100000000,"兆":1000000000000} 3 def chi_num(text): 4 # 如果字符串和"十百千万亿兆"没有并集,直接简单转换 5 if len(set(text).intersection("十百千万亿兆")) == 0: 6 result = simply_convert(text) 7 # 以“兆”字为分隔点,将字符串切割成两个字符串分别处理 8 elif "兆" in text: 9 result = chi_num(text[text.index("兆")+1:]) + decwise_add(text[:text.index("兆")])*dic["兆"] 10 elif "亿" in text: 11 result = chi_num(text[text.index("亿")+1:]) + decwise_add(text[:text.index("亿")])*dic["亿"] 12 elif "万" in text: 13 result = chi_num(text[text.index("万")+1:]) + decwise_add(text[:text.index("万")])*dic["万"] 14 else: 15 result = decwise_add(text) 16 return result 17 18 def simply_convert(text): 19 result="" 20 for i in text: 21 result += str(dic[i]) 22 return int(result) 23 24 # 一万以内的数字(比如“一千二百三十四“)通过"1*1000+2*100+3*10+4"这样的方式进行转换 25 def decwise_add(text): 26 #将字符串中的每个汉字转换成对应的阿拉伯数字 27 temp=[dic[i] for i in text] 28 result=0 29 for i in range(len(temp)): 30 if (temp[i]>9) and (i>0): 31 temp[i]*=temp[i-1] 32 temp[i-1] =0 33 for i in temp: 34 result+=i 35 return result 36 37 import re 38 def formatNum(num): 39 num=str(num) 40 pattern=r'(\d+)(\d{4})((,\d{4})*)' 41 while True: 42 num,count=re.subn(pattern,r'\1,\2\3',num) 43 if count==0: 44 break 45 return num 46 47 if __name__ == '__main__': 48 49 test_num= [u'九', 50 u'十一', 51 u'一百二十三', 52 u'一千二百零三', 53 u'一万一千一百零一', 54 u'十万零三千六百零九', 55 u'一百二十三万四千五百六十七', 56 u'一千一百二十三万四千五百六十七', 57 u'一亿一千一百二十三万四千五百六十七', 58 u'一百零二亿五千零一万零一千零三十八', 59 u'一千一百一十一亿一千一百二十三万四千五百六十七', 60 u'一兆一千一百一十一亿一千一百二十三万四千五百六十七', 61 ] 62 63 for i in test_num: 64 print(i," --> ",formatNum(chi_num(i)))
输出内容:
9 ---- 九
11 ---- 十一
123 ---- 一百二十三
1203 ---- 一千二百零三
1,1101 ---- 一万一千一百零一
10,3609 ---- 十万零三千六百零九
123,4567 ---- 一百二十三万四千五百六十七
1123,4567 ---- 一千一百二十三万四千五百六十七
1,1123,4567 ---- 一亿一千一百二十三万四千五百六十七
102,5001,1038 ---- 一百零二亿五千零一万零一千零三十八
1111,1123,4567 ---- 一千一百一十一亿一千一百二十三万四千五百六十七
1,1111,1123,4567 ---- 一兆一千一百一十一亿一千一百二十三万四千五百六十七
标签:一千一百,中文数字,python,阿拉伯数字,----,六十七,num,result,text From: https://www.cnblogs.com/shengou/p/17498011.html