【python】大写金额转换为数字的简单算法
背景:
项目中遇到的人为填写的大写金额需要转换为数字。目前只支持整元未考虑角分的情况。
如:
一亿三千万 --> 13000000
十万 --> 100000
一百九十万 --> 1900000
一万零一十 --> 10010
拾億零叁佰肆拾柒萬零贰拾捌 --> 1003470028
实现逻辑:
1. 根据数字的读取规则,个十百千万亿,大于10的为单位,等于10的情况要分单位和普通数字。
2. 单位分为基本单位和可变单位,如:一千八百六十万,优先解析万记录为基础单位,再次解析十则可变单位为10*10000 = 100000,基础单位用于和下一次单位计算可变单位为100*10000 = 1000000。
代码:
1 = { 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万: 10000, u萬: 10000, 16 u亿: 100000000, u億: 100000000, 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
关于我:
如果有发现问题可以评论区告诉我,我会及时纠正的。
最后能够帮助到你们我很荣幸!谢谢!
Tags:
下一篇:
java 执行bat脚本,并监控执行结果