最近有一个项目是用Python写的。其中一个要求是客户投入的资金,是数值型的。处理后变成中文,也就是输入123元,需要变成123元,这样才能被我们的智能语音机器人读取,被人类接受。
首先,我们应该知道阅读金钱的习惯:
1、1-9,会直接回到中文1-9,或者是传统。
2、10-19,念成十几个再返回,不要念成十几个。
3,20-99,读几十,返回。
4.一位数不要加什么,十位数加十位数,百位数加百位数,千位数加千位数。
5.四位数组,四位数后加‘10000’,八位数后加‘1亿’。由于项目中的业务原因,只需要支持到1000亿,也就是12位数的金额(即使不是那么高)。
6.如果金额值中有0个或0个以上的零,根据情况读取。如果0后有大于0的数字,转换成中文时加‘零’,否则什么都不加,比如101读101,100读100。
好吧,编码:
def num2cn2(数字,繁体=False):
'''
数字被转换成中文(简体和繁体,目前支持12位数)
:参数数字:
传统的参数: 33366336336
:return:
'''
如果传统:
Chinese_num={0: '零',1: '一',2: '二', '三',4: '四',5: '五',6: '地',7: '七。
Chinese_unit=['千','','拿起','百'
else:
Chinese_num={0: '零',1: '一',2: '二', '三',4: '四',5: '五',6: '六',7: '七。
Chinese_unit=['千','','十','百'
Extra_unit=[' ','一万','一亿']
num_list=list(字符串(数字))
num_cn=[]
Zero_num=0 #连续零的数量
Prev_num='' #遍历列表中当前元素的上一个位置。
长度=len(num_list)
对于num_list:中的num
tmp=数量
如果num=='0': #如果num为0,记录连续零的个数。
zero_num=1
num=' '
else:
零=' '
if零_num 0:
零='零'
zero_num=0
#处理前一位数字的数字读数为0,最后一位数字为1,在十位数上。
如果prev _ num in ('0 ','')和num==' 1 '和Chinese _ unit[长度% 4] in ('ten ',' pick ')3360
num=零中文单位[长度% 4]
else:
num=零Chinese _ num . get(int(num))Chinese _ unit[长度% 4]
如果长度% 4==1: #每四位数加‘一万’和‘一亿’拼接
如果num==' zero' :
num=extra_unit[length //4]
else:
num=extra_unit[length //4]
长度-=1
num_cn.append(数字)
prev_num=tmp
num_cn=' '。联接(num_cn)
返回num_cn
代码中的逻辑是以人类可读的形式编写的。因为python中的代码编写风格是缩进的,四个空格作为一位,所以下面的截图可以看得更清楚:
在Python控制台中测试它:
你认为我们生活中对金钱的正常解读是什么?