使用Python将输入数字转换为中文简体或繁体

最近做的一个项目,是使用Python来编写的,其中有一个需求是客户输入的金钱,是数值类型的,经过处理变成中文形式的,也就是输入123元,要变成一百二十三元,这样经过我们的智能语音机器人的读取,才是人类可读并接受的形式。

首先要知道人类读取金额的习惯:

1、1-9,就直接返回中文的一到九了,或者是繁体的

2、10-19,读成十几返回,不要读成一十几

3、20-99,要读成几十几返回

4、个位数什么都不加,十位数要加十,百位数要加百,千位数要加千

5、四位一组,超过四位要后加‘万’,超过八位后加‘亿’,由于项目中业务原因,只需支持到千亿就行,也就是12位数的金额(怕是没有这么高位的)

6、金额数值中有0或者多个0的,要根据情况来读取,0后面还有大于0的数,就在转换成中文时加‘零’,否则什么都不加,如101读成一百零一,100读成一百

好了,上代码吧:

def num2cn2(number, traditional=False):
 """
 数字转换成中文(简体和繁体,目前支持到12位数值)
 :param number:
 :param traditional:
 :return:
 """
 if traditional:
 chinese_num = {0: '零', 1: '壹', 2: '贰', 3: '叁', 4: '肆', 5: '伍', 6: '陆', 7: '柒', 8: '捌', 9: '玖'}
 chinese_unit = ['仟', '', '拾', '佰']
 else:
 chinese_num = {0: '零', 1: '一', 2: '二', 3: '三', 4: '四', 5: '五', 6: '六', 7: '七', 8: '八', 9: '九'}
 chinese_unit = ['千', '', '十', '百']
 extra_unit = ['', '万', '亿']
 num_list = list(str(number))
 num_cn = []
 zero_num = 0 # 连续0的个数
 prev_num = '' # 遍历列表中当前元素的前一位
 length = len(num_list)
 for num in num_list:
 tmp = num
 if num == '0': # 如果num为0,记录连续0的数量
 zero_num += 1
 num = ''
 else:
 zero = ''
 if zero_num > 0:
 zero = '零'
 zero_num = 0
 # 处理前一位数字为0,后一位为1,并且在十位数上的数值读法
 if prev_num in ('0', '') and num == '1' and chinese_unit[length % 4] in ('十', '拾'):
 num = zero + chinese_unit[length % 4]
 else:
 num = zero + chinese_num.get(int(num)) + chinese_unit[length % 4]
 if length % 4 == 1: # 每隔4位加'万'、'亿'拼接
 if num == '零':
 num = extra_unit[length // 4]
 else:
 num += extra_unit[length // 4]
 length -= 1
 num_cn.append(num)
 prev_num = tmp
 num_cn = ''.join(num_cn)
 return num_cn

代码中的逻辑,就是按照人类可读的形式来编写的,由于python中的代码编写风格是按照四个空格为一位的缩进,下面的截图可以看的更清楚一些:

python数字转换成中文,最简单python输入数字转换成中文

python数字转换成中文,最简单python输入数字转换成中文

在Python Console中来测试一下:

python数字转换成中文,最简单python输入数字转换成中文

python数字转换成中文,最简单python输入数字转换成中文

你觉得生活中我们正常读取金钱的读法是什么样呢?