https://blog.youkuaiyun.com/handsomekang/article/details/52563487?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
参考此代码,做了一些细节的更改
分析
分小数和整数部分进行处理
末尾的零应舍弃
中间有连续多个零,只取一个零
整数部分从右往左以4位为步长扫描
-- coding: utf-8 --
from future import unicode_literals
def convert(n):
str_n = str(n)
units = ['', '万', '亿']
nums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
decimal_label = ['角', '分']
small_int_label = ['', '拾', '佰', '仟']
# 分离整数和小数部分
bs = str_n.split('.')
# 处理小数部分
if len(bs) > 1:
decimal_part = bs[1]
res = []
if decimal_part:
res.append(''.join([nums[int(x)] + y for x, y in zip(decimal_part, decimal_label) if x != '0']))
print('res=',res)
# 处理整数部分
int_part = bs[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 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])
print (convert(100952006.95))
壹亿零玖拾伍万贰仟零陆元玖角伍分