【python】大写金额转换为数字的简单算法
背景:
项目中遇到的人为填写的大写金额需要转换为数字。目前只支持整元未考虑角分的情况。
从策划到设计制作,每一步都追求做到细腻,制作可持续发展的企业网站。为客户提供网站制作、成都做网站、网站策划、网页设计、域名注册、网页空间、网络营销、VI设计、 网站改版、漏洞修补等服务。为客户提供更好的一站式互联网解决方案,以客户的口碑塑造优易品牌,携手广大客户,共同发展进步。
如:
一亿三千万 -->
十万 -->
一百九十万 -->
一万零一十 -->
拾億零叁佰肆拾柒萬零贰拾捌 -->
实现逻辑:
1. 根据数字的读取规则,个十百千万亿,大于10的为单位,等于10的情况要分单位和普通数字。
2. 单位分为基本单位和可变单位,如:一千八百六十万,优先解析万记录为基础单位,再次解析十则可变单位为10* = ,基础单位用于和下一次单位百解析计算可变单位为100* = 。
代码:
1 chinese_num = { 2 u'〇': 0, u'零': 0, 3 u'一': 1, u'壹': 1, 4 u'二': 2, u'两': 2, u'贰': 2, 5 u'三': 3, u'叁': 3, 6 u'四': 4, u'肆': 4, 7 u'五': 5, u'伍': 5, 8 u'六': 6, u'陆': 6, 9 u'七': 7, u'柒': 7, 10 u'八': 8, u'捌': 8, 11 u'九': 9, u'玖': 9, 12 u'十': 10, u'拾': 10, 13 u'百': 100, u'佰': 100, 14 u'千': 1000, u'仟': 1000, 15 u'万': , u'萬': , 16 u'亿': , u'億': , 17 } 18 19 20 def chinese2digits(value): 21 total = 0.00 22 # 基础单位 23 base_unit = 1 24 # 可变单位 25 dynamic_unit = 1 26 for i in range(len(value) - 1, -1, -1): 27 val = chinese_num.get(value[i]) 28 # 表示单位 29 if val > 10: 30 if val > base_unit: 31 base_unit = val 32 else: 33 dynamic_unit = base_unit * val 34 # 10既可以做单位也可做数字 35 elif val == 10: 36 if i == 0: 37 if dynamic_unit > base_unit: 38 total = total + dynamic_unit * val 39 else: 40 total = total + base_unit * val 41 else: 42 dynamic_unit = base_unit * val 43 else: 44 if dynamic_unit > base_unit: 45 total = total + dynamic_unit * val 46 else: 47 total = total + base_unit * val 48 return total
分享文章:【python】大写金额转换为数字的简单算法
当前网址:http://hbruida.cn/article/dsojcip.html