1、支持负数的转化(就是在在前面加"负"汉字) 2、整数部分最大支持12位 到千亿 3、小数部分支持到厘(小数点后3位) 如果想在转化的部分每一位都加上“零”占位,可以将else 部分注释掉(代码中有注释)
如果有错误或格式有不合适的地方欢迎指出
def digital_to_chinese_(digital):
""" 将数组转化为中文大写 """
str_digital = str(digital)
if len(str_digital) == 0:
return ""
chinese_digital = ""
if str_digital[0] == "-":
chinese_digital = "负"
str_digital = str_digital[1:]
chinese = {'1': '壹', '2': '贰', '3': '叁', '4': '肆', '5': '伍', '6': '陆', '7': '柒', '8': '捌', '9': '玖', '0': '零'}
chinese2 = ['圆', '拾', '佰', '仟']
chinese3 = ['万', '亿']
chinese4 = ['角', '分', '厘']
bs = str_digital.split('.')
yuan = bs[0]
if len(yuan) > 12:
return "位数过大无法计算"
jiao = ''
if len(bs) > 1:
jiao = bs[1]
# 转换整数元
yuan_list = []
yuan_revers = yuan[::-1]
for i, num in enumerate(range(0, len(yuan_revers), 4)):
if i > 0:
chinese2[0] = chinese3[i-1]
inner_list = []
for j, k in enumerate(yuan_revers[i*4: (i+1)*4]):
if j == 0 and k == '0':
inner_list += [chinese2[j]]
continue
# 如果想所有的位补上0 把elif 中的注释掉
elif k == '0':
if inner_list[-1] != "零" and inner_list[-1] != chinese2[0]:
inner_list.append("零")
continue
inner_list += [chinese2[j], chinese.get(k, "")]
if len(inner_list) > 1:
yuan_list.extend(inner_list)
yuan_list.reverse()
chinese_digital += "".join(yuan_list) if yuan_list else "零圆"
# 转化角分部分
jiao_list = []
for i, num in enumerate(jiao[:3]):
jiao_list.extend([chinese.get(num, ""), chinese4[i]])
chinese_digital += "".join(jiao_list)
return chinese_digital
if __name__ == '__main__':
print(digital_to_chinese_(-100004000333.245))
|