python数字金额转换为中文大写金额,Python人民币大写
数字到人民币的发音
decimal的导入警告import decimal def cn currency(value,capital=true,prefix=false,classic=none): 人民币数字转换为大写汉字,参数:capital:大写汉字的true金额false一般汉字的金额classic:True元False圆形前缀:True以 RMB 开头False,没有开头 if not isinstance (value,(decimal,str,int)): msg= 由于浮点数的精度问题,请考虑使用字符串或小数。十进制班级。warnings.warn (msg,user warning) #文字中默认金额用圆圈,一般情况下, 汉字量为元如果经典为无:经典=真如果大写else false #前缀如果前缀为真:prefix= RMB else: prefix= #汉字定义dunit=(角,分)如果大写:num=(零,一,二,三,四,五,六,七,八,九)iunit一亿,十,百,千,万,百,千] else: num=(零,一,二,三,四,五,六千,亿,十,百,千)如果是古典的:iunit[0]=元如果是古典的else circle #转换为小数,多余的小数如果不是isinstance则被截断。 Decimal): value=Decimal(值)。Quantize (Decimal (0.01)) #处理负数if value 0: prefix= negative #输出前缀,加上负值=-value #取正的部分,不要想太多把正数和负数四舍五入# assert-value value==0 #成字符串s=str(value)iflen(s)19:raise value error(金额太大,不知道怎么表示。
)istr,Dstr=s.split(。)#小数部分和整数部分处理ISTR=ISTR [:-1] #翻转部分字符串so=[] #用于记录转换结果# zero if value==0:返回前缀num [0] iunit [0] Haszero=False #使用if dstr== 00 标记零:has zero=true #如果没有小数部分,用零标记以避免“舍入”#处理小数部分# divide If dstr[1]!= 0 :所以。append (dunit [1]) so。append(num[int(dstr[1]])else:so。append(整体)#如果没有分数,如果dstr[0]则添加“整体”#角!= 0 :so . append(dunit[0])so . append(num[int(dstr[0])])elif dstr[1]!=0: so.append(num[0]) #无角,无除,加“零”haszero=True #标记已加零#无整数部分if istr==0: if haszero: #既然没有整数部分,那么去掉角位置的零so.pop() so.append(prefix) #加前缀so.reverse() #翻转返回 。join(so) #为I处理整数部分,In enumerate(ISTR):n=int(n)If I % 4==0:#在循环中,一万,一亿,甚至零,也必须有一个单位if i==8 and so[-1]==iunit[4]: #一亿到一万之间全为零的情况so.pop() # Remove一万so.append(iunit[i]) if n==0: #如果没有haszero,则处理这些位上的零的情况:# If零haszero=True #标记添加零。else: #处理非零的情况。Append (num [n]) Haszero=false #再次开始标记零的加法。else: #如果n在其他位置!=0: #非零so的情况。append (iunit [I]) so。append (num [n]) haszero=false #再次标记零的情况else: #处理零的情况if not haszero: #如果之前没有加零,那么. append(num[0]) Haszero=True #最终结果so。追加(前缀)so。reverse()返回“”。join (so) I=input(请输入金额:)print(折算成人民币:,cncurrency(i))执行结果如下图所示:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。