百木园-与人分享,
就是让自己快乐。

【python】大写金额转换为数字的简单算法

背景:

项目中遇到的人为填写的大写金额需要转换为数字。目前只支持整元未考虑角分的情况。

如:

一亿三千万 --> 13000000
十万 --> 100000
一百九十万 --> 1900000
一万零一十 --> 10010
拾億零叁佰肆拾柒萬零贰拾捌 --> 1003470028

实现逻辑:

1. 根据数字的读取规则,个十百千万亿,大于10的为单位,等于10的情况要分单位和普通数字。

2. 单位分为基本单位和可变单位,如:一千八百六十万,优先解析万记录为基础单位,再次解析十则可变单位为10*10000 = 100000,基础单位用于和下一次单位百解析计算可变单位为100*10000 = 1000000。

代码:

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\'\': 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

来源:https://www.cnblogs.com/anlizhaomi/p/15628838.html
图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » 【python】大写金额转换为数字的简单算法

相关推荐

  • 暂无文章