【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:

经验分享 程序员 微信小程序 职场和发展