# Author: Bao
import re
def num_to_mandarin(num):
"""
Convert int number to mandarin in simplified Chinese.
:param num: int
:return: simplified Chinese string
In [1]: num_to_mandarin(123784700200019)
Out[1]: '一百二十三万七千八百四十七亿零二十万零一十九'
In [2]: num_to_mandarin(30023)
Out[2]: '三万零二十三'
In [3]: num_to_mandarin(102)
Out[3]: '一百零二'
In [4]: num_to_mandarin(15)
Out[4]: '十五'
"""
def to_mandarin(string):
string = re.sub('0', '零', string)
string = re.sub('1', '一', string)
string = re.sub('2', '二', string)
string = re.sub('3', '三', string)
string = re.sub('4', '四', string)
string = re.sub('5', '五', string)
string = re.sub('6', '六', string)
string = re.sub('7', '七', string)
string = re.sub('8', '八', string)
string = re.sub('9', '九', string)
return string
def integrity(num):
k_unit = ['千', '百', '十', '']
mandarin_str = '零' * (4 - len(str(num)) % 4) + to_mandarin(str(num))
seg_bits = [mandarin_str[4 * i:4 * (i + 1)] for i in range(len(mandarin_str) // 4)]
cal_seg = seg_bits[::-1]
result = []
for seg_idx, k_seg in enumerate(cal_seg):
mandarin = ''
for idx, bit in enumerate(k_seg):
if bit == '零':
continue
else:
if k_seg[idx - 1] == '零' and mandarin:
mandarin += '零'
mandarin += bit + k_unit[idx]
if k_seg == '零' * 4:
mandarin = ''
else:
if k_seg[0] == '零':
try:
if cal_seg[seg_idx + 1]:
mandarin = '零' + mandarin
except IndexError:
if mandarin.startswith('一十'):
mandarin = mandarin.lstrip('一')
suffix = '万' if seg_idx % 2 else '亿'
if seg_idx == 0 or not mandarin:
suffix = ''
result.append(mandarin + suffix)
return ''.join(result[::-1])
return integrity(num)
数值转汉字
最新推荐文章于 2024-05-07 19:50:13 发布