数值转汉字

# 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)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值