数字金额转化为中文大写(网上查询都是那一套代码,有0在中间穿插并不准确)自己又整理了一下,自测好使,分享一下

1、支持负数的转化(就是在在前面加"负"汉字)
2、整数部分最大支持12位 到千亿
3、小数部分支持到厘(小数点后3位)
如果想在转化的部分每一位都加上“零”占位,可以将else 部分注释掉(代码中有注释)

如果有错误或格式有不合适的地方欢迎指出

def digital_to_chinese_(digital):
    """ 将数组转化为中文大写 """
    str_digital = str(digital)
    if len(str_digital) == 0:
        return ""
    chinese_digital = ""
    if str_digital[0] == "-":
        chinese_digital = "负"
        str_digital = str_digital[1:]

    chinese = {'1': '壹', '2': '贰', '3': '叁', '4': '肆', '5': '伍', '6': '陆', '7': '柒', '8': '捌', '9': '玖', '0': '零'}
    chinese2 = ['圆', '拾', '佰', '仟']
    chinese3 = ['万', '亿']
    chinese4 = ['角', '分', '厘']
    bs = str_digital.split('.')
    yuan = bs[0]
    if len(yuan) > 12:
        return "位数过大无法计算"
    jiao = ''
    if len(bs) > 1:
        jiao = bs[1]

    # 转换整数元
    yuan_list = []
    yuan_revers = yuan[::-1]
    for i, num in enumerate(range(0, len(yuan_revers), 4)):
        if i > 0:
            chinese2[0] = chinese3[i-1]
        inner_list = []
        for j, k in enumerate(yuan_revers[i*4: (i+1)*4]):
            if j == 0 and k == '0':
                inner_list += [chinese2[j]]
                continue
            # 如果想所有的位补上0 把elif 中的注释掉
            elif k == '0':
                if inner_list[-1] != "零" and inner_list[-1] != chinese2[0]:
                    inner_list.append("零")
                continue
            inner_list += [chinese2[j], chinese.get(k, "")]
        if len(inner_list) > 1:
            yuan_list.extend(inner_list)
    yuan_list.reverse()
    chinese_digital += "".join(yuan_list) if yuan_list else "零圆"

    # 转化角分部分
    jiao_list = []
    for i, num in enumerate(jiao[:3]):
        jiao_list.extend([chinese.get(num, ""), chinese4[i]])
    chinese_digital += "".join(jiao_list)

    return chinese_digital
if __name__ == '__main__':
    print(digital_to_chinese_(-100004000333.245))

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值