今天有人在群里问到Python怎么把小写数字转换成中文的大写字符,觉得这个问题很有趣,于是想了一下,就开始写代码了。
以下是代码,感觉不足的地方就是如果是1001元,那么就会转换成 壹仟零佰零拾壹圆,多了个零。这个代码python2和python3都可以运行。
# -*- coding:utf-8 -*-
# date: 2018-02-28 11:48
def digital_to_chinese(digital):
str_digital = str(digital)
chinese = {"1": "壹", "2": "贰", "3": "叁", "4": "肆", "5": "伍", "6": "陆", "7": "柒", "8": "捌", "9": "玖", "0": "零"}
chinese2 = ["拾", "佰", "仟", "万", "厘", "分", "角"]
jiao = ""
bs = str_digital.split(".")
yuan = bs[0]
if len(bs) > 1:
jiao = bs[1]
r_yuan = [i for i in reversed(yuan)]
count = 0
for i in range(len(yuan)):
if i == 0:
r_yuan[i] += "圆"
continue
r_yuan[i] += chinese2[count]
count += 1
if count == 4:
count = 0
chinese2[3] = "亿"
s_jiao = [i for i in jiao][:3] # 去掉小于厘之后的
j_count = -1
for i in range(len(s_jiao)):
s_jiao[i] += chinese2[j_count]
j_count -= 1
last = [i for i in reversed(r_yuan)] + s_jiao
last_str = "".join(last)
print(str_digital)
print(last_str)
last_str = last_str.replace("0百", "0").replace("0十", "0").replace("000", "0").replace("00", "0").replace("0圆", "圆")
for i in range(len(last_str)):
digital = last_str[i]
if digital in chinese:
last_str = last_str.replace(digital, chinese[digital])
print(last_str)
return last_str
if __name__ == "__main__":
digital_to_chinese(123456789.456)
这是输出
123456789.456
1亿2仟3佰4拾5万6仟7佰8拾9圆4角5分6厘
壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖圆肆角伍分陆厘