Python实现人民币数字转汉字大写金额

hresh 634 0

Python实现人民币数字转汉字大写金额

背景

银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序。

在中文大写方式中,0到10以及100、1000、10000被依次表示为: 零 壹 贰 叁 肆 伍 陆 柒 捌 玖 拾 佰 仟 万

以下的例子示范了阿拉伯数字到人民币大写的转换规则:

1 壹圆

11 壹拾壹圆

111 壹佰壹拾壹圆

101 壹佰零壹圆

给一个数字,不超过两位小数,其中整数部分(a<100000000)。

代码部分

def money_en_to_cn():
    '''
    此方法对各种数据验证都通过
    :return:
    '''
    # money_en  = 12345678
    # money_en  = 10100010
    # money_en  = 10101010
    # money_en  = 10100110
    # money_en  = 10100101
    money_en = 1010101.20
    num_list = [{'0': '零', '1': '壹', '2': '贰', '3': '叁', '4': '肆', '5': '伍', '6': '陆', '7': '柒', '8': '捌', '9': '玖'},
                '拾', '佰', '仟', '万']

    decimal_list = ['角','分']

    def func(b):
        ns = ''
        for x in range(1, len(b)):
            num = num_list[0][b[x]]
            word = num + (num_list[x] if b[x]!='0' else '')
            ns = word + ns

        return ns + (num_list[0][b[0]] if b[0] != '0' else '')

    NUM_LINE = 10000
    money_cn = ''
    if money_en == 0:
        return '零圆'

    aa = copy.copy(int(money_en))
    unit = '圆'
    while aa % NUM_LINE:
        b = str(aa % NUM_LINE)[::-1]
        if len(str(aa)) > 4 and len(str(b)) != 4:
            b = b + '0'
        money_cn = func(b) + unit + money_cn
        aa = aa // NUM_LINE
        unit = '万' if aa else '圆'


    if isinstance(money_en,float):
        ab = round(money_en,2)
        ab = str(ab).split('.')[1]
        for x in range(0, len(ab)):
            num = num_list[0][ab[x]]
            word = num + (decimal_list[x] if ab[x] != '0' else '')
            money_cn += word

    return money_cn

输出结果为:

壹佰零壹万零壹佰零壹圆贰角

发表评论 取消回复
表情 图片 链接 代码

分享