Python 任意长度的人民币小写金额转大写的简短代码

简介: Python 任意长度的人民币小写金额转大写的简短代码

传入的参数 num:如果是数值,则超过长整型最大值(约14位长度)会被截尾; 如果是字符串,则不受影响。 以下代码最长可转整数部分20位,应该足够了毕竟世界首富、或者两只马也没这么钱啊。如果还需要更长,只要在cnStr[2]里添加更多汉语的数字单位:“京”10^16后面还有:垓、秭、穰、沟、涧、正、载、极10^48。 (扩展资料:“千极”之后还有佛教中的数量单位:恒河沙、阿僧只、那由他、不可思议、无量、大数。1大数是不是10^72,到底对不对0多得没点过来^-^)


def Translate(num):
    '''数字转人民币格式'''
    #判断参数类型
    if type(num)==type(''):
        try: f=float(num)
        except: return u'金额字符串无法转换成数字!'
        if f<0: num=num[1:]
        tmp = num.split('.')
    elif type(num) in [type(0),type(0.0)]:
        fNum=1.0e+16 # 如果是数字大于100兆会被截尾处理,字符串不受影响
        if not 0<=num<fNum: return f'金额必须为非负数且小于{fNum}!'
        tmp = str(num).split('.')
    else: return u'金额必须是数字或字符串!'
    #汉字格式字符串
    ret,cn='', ['']*3
    cnStr = (u'角分整',u'零壹贰叁肆伍陆柒捌玖',u'元拾佰仟万拾佰仟亿拾佰仟兆拾佰仟京拾佰仟')
    for i in range(3): cn[i]=[c for c in cnStr[i]]
    if len(tmp[0])>len(cn[2]): return u'金额数值过大,已超过设置的最大值!'
    if len(tmp)>1 and len(tmp[1])>2: tmp[1]=tmp[1][:2] #小数大于2位截尾处理
    #转换整数和小数
    for i,n in enumerate(reversed(list(tmp[0]))): ret = cn[1][int(n)]+cn[2][i]+ret
    if len(tmp)>1:
        if tmp[0][-1]=='0': ret += cn[1][0]
        for i,n in enumerate(list(tmp[1])): ret += cn[1][int(n)] + cn[0][i]
    #根据书写规则替换掉不该出现的字串
    for i in range(2): ret=ret.replace(cn[1][0]+cn[0][i],cn[1][0])
    for i in range(1,4): ret=ret.replace(cn[1][0]+cn[2][i],cn[1][0])
    for i in range(3,1,-1): ret=ret.replace(cn[1][0]*i,cn[1][0])
    for i in range(0,len(cn[2]),4): ret=ret.replace(cn[1][0]+cn[2][i],cn[2][i])
    for i in range(4,10,4): ret=ret.replace(cn[2][i+4]+cn[2][i],cn[2][i+4])
    if ret[0] in {cn[1][0],cn[2][0]}: ret=ret[1:]
    if len(ret)>1:
        if ret[-1] == cn[1][0]: ret=ret[:-1]+cn[0][2]
        if ret[-1] == cn[2][0]: ret+=cn[0][2]
        if ret[0] in {cn[1][0],cn[2][0]}: ret=ret[1:]
    else:
        ret=cn[1][0]+cn[2][0] 
    return ret
'''========================================================'''
#测试转换字符串
print(Translate('abc12.5'))
print(Translate('123.0.0'))
print(Translate('-123.00'))
print(Translate('100.458'))
print(Translate('100'))
print(Translate('.2'))
print(Translate('.02'))
print(Translate('0.0'))
print(Translate('0.'))
print(Translate('.0'))
print(Translate('90045020500138.56'))
print(Translate('901450205001238.56'))
print(Translate('9124502050012389.56'))
print(Translate('61288888000000000009.56'))
print(Translate('7861388888000000000003.23'))
print()
#产生随机数验证
from random import *
for i in range(100):
    n=round(random()*10**randrange(1,17),2)
    print(f'{n:18}',Translate(n))
print()
print(Translate(12))
print(Translate(10.1))
print(Translate(1.01))
print(Translate(2.))
print(Translate(.2))
print(Translate(.02))
print(Translate(0.0))
print(Translate(0.))
print(Translate(.0))



测试结果:

金额字符串无法转换成数字!
金额字符串无法转换成数字!
壹佰贰拾叁元整
壹佰元肆角伍分
壹佰元整
贰角
贰分
零元
零元
零元
玖拾兆零肆佰伍拾亿贰仟零伍拾万零壹佰叁拾捌元伍角陆分
玖佰零壹兆肆仟伍佰零贰亿零伍佰万壹仟贰佰叁拾捌元伍角陆分
玖仟壹佰贰拾肆兆伍仟零贰拾亿伍仟零壹万贰仟叁佰捌拾玖元伍角陆分
陆仟壹佰贰拾捌京捌仟捌佰捌拾捌兆零玖元伍角陆分
金额数值过大,已超过设置的最大值!
             78.63 柒拾捌元陆角叁分
      532910517.61 伍亿叁仟贰佰玖拾壹万零伍佰壹拾柒元陆角壹分
 91088427148883.98 玖拾壹兆零捌佰捌拾肆亿贰仟柒佰壹拾肆万捌仟捌佰捌拾叁元玖角捌分
          23907.18 贰万叁仟玖佰零柒元壹角捌分
 10905445734660.77 壹拾兆玖仟零伍拾肆亿肆仟伍佰柒拾叁万肆仟陆佰陆拾元柒角柒分
              3.21 叁元贰角壹分
         133357.11 壹拾叁万叁仟叁佰伍拾柒元壹角壹分
       92075616.81 玖仟贰佰零柒万伍仟陆佰壹拾陆元捌角壹分
470623129148281.75 肆佰柒拾兆陆仟贰佰叁拾壹亿贰仟玖佰壹拾肆万捌仟贰佰捌拾壹元柒角伍分
     5268698975.12 伍拾贰亿陆仟捌佰陆拾玖万捌仟玖佰柒拾伍元壹角贰分
   138562118363.39 壹仟叁佰捌拾伍亿陆仟贰佰壹拾壹万捌仟叁佰陆拾叁元叁角玖分
             38.16 叁拾捌元壹角陆分
              1.07 壹元零柒分
      659606310.98 陆亿伍仟玖佰陆拾万陆仟叁佰壹拾元玖角捌分
      554063575.54 伍亿伍仟肆佰零陆万叁仟伍佰柒拾伍元伍角肆分
       95188488.28 玖仟伍佰壹拾捌万捌仟肆佰捌拾捌元贰角捌分
  90322976709737.3 玖拾兆叁仟贰佰贰拾玖亿柒仟陆佰柒拾万玖仟柒佰叁拾柒元叁角
       260947553.2 贰亿陆仟零玖拾肆万柒仟伍佰伍拾叁元贰角
          94279.87 玖万肆仟贰佰柒拾玖元捌角柒分
      934777940.33 玖亿叁仟肆佰柒拾柒万柒仟玖佰肆拾元叁角叁分
      815949408.89 捌亿壹仟伍佰玖拾肆万玖仟肆佰零捌元捌角玖分
          78920.72 柒万捌仟玖佰贰拾元柒角贰分
     5139891720.55 伍拾壹亿叁仟玖佰捌拾玖万壹仟柒佰贰拾元伍角伍分
 650589924902298.0 陆佰伍拾兆伍仟捌佰玖拾玖亿贰仟肆佰玖拾万贰仟贰佰玖拾捌元整
             90.42 玖拾元肆角贰分
             364.3 叁佰陆拾肆元叁角
        4534573.24 肆佰伍拾叁万肆仟伍佰柒拾叁元贰角肆分
   679757203079.07 陆仟柒佰玖拾柒亿伍仟柒佰贰拾万叁仟零柒拾玖元零柒分
         642773.58 陆拾肆万贰仟柒佰柒拾叁元伍角捌分
              66.3 陆拾陆元叁角
4071402630588777.5 肆仟零柒拾壹兆肆仟零贰拾陆亿叁仟零伍拾捌万捌仟柒佰柒拾柒元伍角
  9300888286906.88 玖兆叁仟零捌亿捌仟捌佰贰拾捌万陆仟玖佰零陆元捌角捌分
    68099730655.82 陆佰捌拾亿玖仟玖佰柒拾叁万零陆佰伍拾伍元捌角贰分
   897837561192.22 捌仟玖佰柒拾捌亿叁仟柒佰伍拾陆万壹仟壹佰玖拾贰元贰角贰分
      491314127.45 肆亿玖仟壹佰叁拾壹万肆仟壹佰贰拾柒元肆角伍分
         574370.48 伍拾柒万肆仟叁佰柒拾元肆角捌分
          67119.07 陆万柒仟壹佰壹拾玖元零柒分
   116784440690.59 壹仟壹佰陆拾柒亿捌仟肆佰肆拾肆万零陆佰玖拾元伍角玖分
  3538317930136.68 叁兆伍仟叁佰捌拾叁亿壹仟柒佰玖拾叁万零壹佰叁拾陆元陆角捌分
    174782037891.4 壹仟柒佰肆拾柒亿捌仟贰佰零叁万柒仟捌佰玖拾壹元肆角
  9005130696809.79 玖兆零伍拾壹亿叁仟零陆拾玖万陆仟捌佰零玖元柒角玖分
 54152682188201.57 伍拾肆兆壹仟伍佰贰拾陆亿捌仟贰佰壹拾捌万捌仟贰佰零壹元伍角柒分
         7874238.0 柒佰捌拾柒万肆仟贰佰叁拾捌元整
    87201420561.03 捌佰柒拾贰亿零壹佰肆拾贰万零伍佰陆拾壹元零叁分
     9088511743.73 玖拾亿捌仟捌佰伍拾壹万壹仟柒佰肆拾叁元柒角叁分
 45824762217270.39 肆拾伍兆捌仟贰佰肆拾柒亿陆仟贰佰贰拾壹万柒仟贰佰柒拾元零叁角玖分
   970036043919.77 玖仟柒佰亿叁仟陆佰零肆万叁仟玖佰壹拾玖元柒角柒分
             42.88 肆拾贰元捌角捌分
   495963434010.35 肆仟玖佰伍拾玖亿陆仟叁佰肆拾叁万肆仟零壹拾元叁角伍分
        8762144.86 捌佰柒拾陆万贰仟壹佰肆拾肆元捌角陆分
              0.39 叁角玖分
          37282.09 叁万柒仟贰佰捌拾贰元零玖分
    92067475408.28 玖佰贰拾亿陆仟柒佰肆拾柒万伍仟肆佰零捌元贰角捌分
            551.45 伍佰伍拾壹元肆角伍分
            193.11 壹佰玖拾叁元壹角壹分
535166688139790.75 伍佰叁拾伍兆壹仟陆佰陆拾陆亿捌仟捌佰壹拾叁万玖仟柒佰玖拾元零柒角伍分
        2748704.92 贰佰柒拾肆万捌仟柒佰零肆元玖角贰分
             97.84 玖拾柒元捌角肆分
           9453.33 玖仟肆佰伍拾叁元叁角叁分
  4029772050738.78 肆兆零贰佰玖拾柒亿柒仟贰佰零伍万零柒佰叁拾捌元柒角捌分
7185012601661807.0 柒仟壹佰捌拾伍兆零壹佰贰拾陆亿零壹佰陆拾陆万壹仟捌佰零柒元整
      463216994.46 肆亿陆仟叁佰贰拾壹万陆仟玖佰玖拾肆元肆角陆分
              7.71 柒元柒角壹分
        2183472.12 贰佰壹拾捌万叁仟肆佰柒拾贰元壹角贰分
            5319.1 伍仟叁佰壹拾玖元壹角
         811388.33 捌拾壹万壹仟叁佰捌拾捌元叁角叁分
     7039884793.74 柒拾亿叁仟玖佰捌拾捌万肆仟柒佰玖拾叁元柒角肆分
        8352849.81 捌佰叁拾伍万贰仟捌佰肆拾玖元捌角壹分
      8414787833.4 捌拾肆亿壹仟肆佰柒拾捌万柒仟捌佰叁拾叁元肆角
           5805.67 伍仟捌佰零伍元陆角柒分
             63.85 陆拾叁元捌角伍分
5426494813114542.0 伍仟肆佰贰拾陆兆肆仟玖佰肆拾捌亿壹仟叁佰壹拾壹万肆仟伍佰肆拾贰元整
        1652222.06 壹佰陆拾伍万贰仟贰佰贰拾贰元零陆分
   434459299788.28 肆仟叁佰肆拾肆亿伍仟玖佰贰拾玖万玖仟柒佰捌拾捌元贰角捌分
9178171204939016.0 玖仟壹佰柒拾捌兆壹仟柒佰壹拾贰亿零肆佰玖拾叁万玖仟零壹拾陆元整
       99624508.02 玖仟玖佰陆拾贰万肆仟伍佰零捌元零贰分
1791557576970805.8 壹仟柒佰玖拾壹兆伍仟伍佰柒拾伍亿柒仟陆佰玖拾柒万零捌佰零伍元捌角
            574.27 伍佰柒拾肆元贰角柒分
114633735791625.06 壹佰壹拾肆兆陆仟叁佰叁拾柒亿叁仟伍佰柒拾玖万壹仟陆佰贰拾伍元零陆分
        8013137.48 捌佰零壹万叁仟壹佰叁拾柒元肆角捌分
       50658637.63 伍仟零陆拾伍万捌仟陆佰叁拾柒元陆角叁分
    800434220597.8 捌仟零肆亿叁仟肆佰贰拾贰万零伍佰玖拾柒元捌角
  1306226838673.28 壹兆叁仟零陆拾贰亿贰仟陆佰捌拾叁万捌仟陆佰柒拾叁元贰角捌分
     1975734804.47 壹拾玖亿柒仟伍佰柒拾叁万肆仟捌佰零肆元肆角柒分
             60.92 陆拾元零玖角贰分
             40.03 肆拾元零叁分
  2606176712982.49 贰兆陆仟零陆拾壹亿柒仟陆佰柒拾壹万贰仟玖佰捌拾贰元肆角玖分
    44851655780.14 肆佰肆拾捌亿伍仟壹佰陆拾伍万伍仟柒佰捌拾元壹角肆分
   922209879494.66 玖仟贰佰贰拾贰亿零玖佰捌拾柒万玖仟肆佰玖拾肆元陆角陆分
      140847028.76 壹亿肆仟零捌拾肆万柒仟零贰拾捌元柒角陆分
5334816938744540.0 伍仟叁佰叁拾肆兆捌仟壹佰陆拾玖亿叁仟捌佰柒拾肆万肆仟伍佰肆拾元整
      141386976.28 壹亿肆仟壹佰叁拾捌万陆仟玖佰柒拾陆元贰角捌分
     7805056422.25 柒拾捌亿零伍佰零伍万陆仟肆佰贰拾贰元贰角伍分
          44831.97 肆万肆仟捌佰叁拾壹元玖角柒分
              7.65 柒元陆角伍分
      798488177.29 柒亿玖仟捌佰肆拾捌万捌仟壹佰柒拾柒元贰角玖分
     8605715496.27 捌拾陆亿零伍佰柒拾壹万伍仟肆佰玖拾陆元贰角柒分
   796777067098.38 柒仟玖佰陆拾柒亿柒仟柒佰零陆万柒仟零玖拾捌元叁角捌分
           7131.28 柒仟壹佰叁拾壹元贰角捌分
       32194956.06 叁仟贰佰壹拾玖万肆仟玖佰伍拾陆元零陆分
壹拾贰元整
壹拾元零壹角
壹元零壹分
贰元整
贰角
贰分
零元
零元
零元


其中对规则:'角'结尾,“整"可加可不加,作不加整处理。


如果还有错误,请自行修改“替换规则”部分的代码即可。


目录
相关文章
|
9天前
|
开发框架 数据建模 中间件
Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器是那些静悄悄的幕后英雄。它们不张扬,却能默默地为函数或类增添强大的功能。本文将带你了解装饰器的魅力所在,从基础概念到实际应用,我们一步步揭开装饰器的神秘面纱。准备好了吗?让我们开始这段简洁而富有启发性的旅程吧!
21 6
|
2天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
28 8
|
9天前
|
API Python
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
31 11
|
11天前
|
测试技术 Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界中,装饰器是那些能够为我们的代码增添魔力的小精灵。它们不仅让代码看起来更加优雅,还能在不改变原有函数定义的情况下,增加额外的功能。本文将通过生动的例子和易于理解的语言,带你领略装饰器的奥秘,从基础概念到实际应用,一起开启Python装饰器的奇妙旅程。
29 11
|
7天前
|
Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器就像是给函数穿上了一件神奇的外套,让它们拥有了超能力。本文将通过浅显易懂的语言和生动的比喻,带你了解装饰器的基本概念、使用方法以及它们如何让你的代码变得更加简洁高效。让我们一起揭开装饰器的神秘面纱,看看它是如何在不改变函数核心逻辑的情况下,为函数增添新功能的吧!
|
7天前
|
程序员 测试技术 数据安全/隐私保护
深入理解Python装饰器:提升代码重用与可读性
本文旨在为中高级Python开发者提供一份关于装饰器的深度解析。通过探讨装饰器的基本原理、类型以及在实际项目中的应用案例,帮助读者更好地理解并运用这一强大的语言特性。不同于常规摘要,本文将以一个实际的软件开发场景引入,逐步揭示装饰器如何优化代码结构,提高开发效率和代码质量。
31 6
|
12天前
|
Python
如何提高Python代码的可读性?
如何提高Python代码的可读性?
25 4
|
12天前
|
Python
Python编程入门:从零开始的代码旅程
本文是一篇针对Python编程初学者的入门指南,将介绍Python的基本语法、数据类型、控制结构以及函数等概念。文章旨在帮助读者快速掌握Python编程的基础知识,并能够编写简单的Python程序。通过本文的学习,读者将能够理解Python代码的基本结构和逻辑,为进一步深入学习打下坚实的基础。
|
16天前
|
设计模式 监控 程序员
Python中的装饰器:功能增强与代码复用的利器####
本文深入探讨了Python中装饰器的工作原理、应用场景及其在提升代码可读性、减少重复劳动方面的优势。不同于传统方法的冗长和复杂,装饰器提供了一种优雅且高效的方式来增强函数或方法的功能。通过具体实例,我们将揭示装饰器如何简化错误处理、日志记录及性能监控等常见任务,使开发者能够专注于核心业务逻辑的实现。 ####
|
15天前
|
存储 设计模式 缓存
Python中的装饰器:代码的魔法增强剂####
本文将深入探讨Python语言中一个强大而灵活的特性——装饰器。不同于传统的函数调用,装饰器提供了一种优雅的方式来扩展或修改函数行为,无需直接修改原函数代码。我们将通过实例分析,揭示装饰器的定义、工作原理及其在实际项目中的应用价值,旨在帮助开发者更好地理解和利用这一高级功能,提升代码的可读性与维护性。 ####