因为是初次接触python,学了一点基础的应用就想自己做点东西玩,搬了mattkang 大佬写的代码自己又改了改,发现能用还挺开心,试了几个数字之后发现有问题:当输入的数字十位数为零时,返回的繁体金额会少一分钱。。。。求大佬解答问题出在哪里啊?还有其他的问题吗?
代码如下:
-*- coding: utf-8 -*-
#抄的mattkang大佬的代码(CSDN)
from future import unicode_literals
def convert(n):
units = ['', '万', '亿']
nums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
decimal_label = ['角', '分']
small_int_label = ['', '拾', '佰', '仟']
int_part, decimal_part = str(int(n)), str(n - int(n))[2:] # 分离整数和小数部分
res = []
if decimal_part:
res.append(''.join([nums[int(x)] + y for x, y in zip(decimal_part, decimal_label) if x != '0']))
if int_part != '0':
res.append('圆')
while int_part:
small_int_part, int_part = int_part[-4:], int_part[:-4]
tmp = ''.join([nums[int(x)] + (y if x != '0' else '') for x, y in list(zip(small_int_part[::-1], small_int_label))[::-1]])
tmp = tmp.rstrip('零').replace('零零零', '零').replace('零零', '零')
unit = units.pop(0)
if tmp:
tmp += unit
res.append(tmp)
return ''.join(res[::-1])
n=float(input('请输入金额:',))
print(convert(n))
返回的结果例子
D:>python 金额繁体转换.py
请输入金额:2090104829.19
贰拾亿玖仟零壹拾万肆仟捌佰贰拾玖圆壹角玖分
D:>python 金额繁体转换.py
请输入金额:2345103.19
贰佰叁拾肆万伍仟壹佰零叁圆壹角捌分
D:>python 金额繁体转换.py
请输入金额:203.19
贰佰零叁圆壹角捌分
D:>python 金额繁体转换.py
请输入金额:203.17
贰佰零叁圆壹角陆分