金额数字转大写,支持浮点数

def convert(num):
    """
    数字转化成大写
    :param num: [int/string/float] 数字、含千分分隔符数字
    :return: string 大写数字
    """
    # 格式化输入内容,去掉含千分分隔符,去掉空格,去掉转义符号
    num = str(num).replace(',', '').replace(' ', '').strip()

    ch_num = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖', '拾']
    s_unit = ['', '拾', '佰', '仟']
    # 不够的话可以继续往后面加
    b_unit = ['', '万', '亿', '兆', '京', '垓', '秭', '穰', '沟', '涧', '正', '载', '极']
    float_cont = ''
    # 小数部分
    if '.' in num:
        float_cont += ''.join([ch_num[int(fc)] for fc in f'{num}'.split('.')[1]])
        num = f'{num}'.split('.')[0]
    # 整数部分
    numlist = list(map(int, str(num)))
    numlist.reverse()
    l = []
    j = 0
    for i in range(0, len(numlist), 4):
        p = []
        if sum(numlist[i:i+4]):
            for ii in range(0, 4):
                if (i+ii) < len(numlist):
                    if numlist[i+ii]:
                        p.append([s_unit[ii], ch_num[numlist[i+ii]]])
                    else:
                        if p and p[-1] != ['零']:
                            p.append(['零'])
            if j < len(b_unit):
                l.append([b_unit[j]]+p)
            else:
                return "数字太大,超出计量范围!!"
        else:
            if l and l[-1] != ['零'] and l[-1][-1] != ['零']:
                l.append(['零'])
        j += 1
    l = [c for a in l for b in a for c in b if c]
    l.reverse()
    l = ''.join(l)
    return l + '点' + float_cont if float_cont != '' else l


if __name__ == '__main__':
    print(convert(124134.777))

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值