背景
银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序。
在中文大写方式中,0到10以及100、1000、10000被依次表示为: 零 壹 贰 叁 肆 伍 陆 柒 捌 玖 拾 佰 仟 万
以下的例子示范了阿拉伯数字到人民币大写的转换规则:
1 壹圆
11 壹拾壹圆
111 壹佰壹拾壹圆
101 壹佰零壹圆
给一个数字,不超过两位小数,其中整数部分(a<100000000)。
代码部分
def money_en_to_cn():
'''
此方法对各种数据验证都通过
:return:
'''
# money_en = 12345678
# money_en = 10100010
# money_en = 10101010
# money_en = 10100110
# money_en = 10100101
money_en = 1010101.20
num_list = [{'0': '零', '1': '壹', '2': '贰', '3': '叁', '4': '肆', '5': '伍', '6': '陆', '7': '柒', '8': '捌', '9': '玖'},
'拾', '佰', '仟', '万']
decimal_list = ['角','分']
def func(b):
ns = ''
for x in range(1, len(b)):
num = num_list[0][b[x]]
word = num + (num_list[x] if b[x]!='0' else '')
ns = word + ns
return ns + (num_list[0][b[0]] if b[0] != '0' else '')
NUM_LINE = 10000
money_cn = ''
if money_en == 0:
return '零圆'
aa = copy.copy(int(money_en))
unit = '圆'
while aa % NUM_LINE:
b = str(aa % NUM_LINE)[::-1]
if len(str(aa)) > 4 and len(str(b)) != 4:
b = b + '0'
money_cn = func(b) + unit + money_cn
aa = aa // NUM_LINE
unit = '万' if aa else '圆'
if isinstance(money_en,float):
ab = round(money_en,2)
ab = str(ab).split('.')[1]
for x in range(0, len(ab)):
num = num_list[0][ab[x]]
word = num + (decimal_list[x] if ab[x] != '0' else '')
money_cn += word
return money_cn
输出结果为:
壹佰零壹万零壹佰零壹圆贰角