用Python将数字转换为中文大写
来源:互联网 发布:剑灵男灵族捏脸数据图 编辑:程序博客网 时间:2024/05/20 18:03
利用Python将阿拉伯数字转化为中文大写,其实最麻烦的地方就是中间空多个0的问题,这种情况下,采用拆分法则,将一个大数字,先拆分成整数部分和小数部分,再对整数部分按照仟、万、亿、兆分位拆分为四个字符串组成的List,每个字符串最多4个字符,然后对每个分位的字符串用大写函数转换成大写,最后合并,这样等于缩减了问题,处理就相对简单了。
本来想利用数字形式直接再函数里处理,没想到过百亿后在函数调用时小数位会被自动缩进,似乎Python的函数无法传递过长的数字(这点还望请高手赐教),所以这里写的函数改为了字符串形式。
# -*- coding: utf-8 -*-"""Created on Sat Apr 06 00:28:24 2013@author: zzcwing"""#算法说明:要求字符串输入,现将字符串差费为整数部分和小数部分生成list[整数部分,小数部分]#将整数部分拆分为:[亿,万,仟]三组字符串组成的List:['0000','0000','0000'](根据实际输入生成阶梯List)#例如:600190000010.70整数部分拆分为:['600','1900','0010']#然后对list中每个字符串分组进行大写化再合并#最后处理小数部分的大写化class cnumber: cdict={} gdict={} xdict={} def __init__(self): self.cdict={1:u'',2:u'拾',3:u'佰',4:u'仟'} self.xdict={1:u'元',2:u'万',3:u'亿',4:u'兆'} #数字标识符 self.gdict={0:u'零',1:u'壹',2:u'贰',3:u'叁',4:u'肆',5:u'伍',6:u'陆',7:u'柒',8:u'捌',9:u'玖'} def csplit(self,cdata): #拆分函数,将整数字符串拆分成[亿,万,仟]的list g=len(cdata)%4 csdata=[] lx=len(cdata)-1 if g>0: csdata.append(cdata[0:g]) k=g while k<=lx: csdata.append(cdata[k:k+4]) k+=4 return csdata def cschange(self,cki): #对[亿,万,仟]的list中每个字符串分组进行大写化再合并 lenki=len(cki) i=0 lk=lenki chk=u'' for i in range(lenki): if int(cki[i])==0: if i<lenki-1: if int(cki[i+1])!=0: chk=chk+self.gdict[int(cki[i])] else: chk=chk+self.gdict[int(cki[i])]+self.cdict[lk] lk-=1 return chk def cwchange(self,data): cdata=str(data).split('.') cki=cdata[0] ckj=cdata[1] i=0 chk=u'' cski=self.csplit(cki) #分解字符数组[亿,万,仟]三组List:['0000','0000','0000'] ikl=len(cski) #获取拆分后的List长度 #大写合并 for i in range(ikl): if self.cschange(cski[i])=='': #有可能一个字符串全是0的情况 chk=chk+self.cschange(cski[i]) #此时不需要将数字标识符引入 else: chk=chk+self.cschange(cski[i])+self.xdict[ikl-i] #合并:前字符串大写+当前字符串大写+标识符 #处理小数部分 lenkj=len(ckj) if lenkj==1: #若小数只有1位 if int(ckj[0])==0: chk=chk+u'整' else: chk=chk+self.gdict[int(ckj[0])]+u'角整' else: #若小数有两位的四种情况 if int(ckj[0])==0 and int(ckj[1])!=0: chk=chk+u'零'+self.gdict[int(ckj[1])]+u'分' elif int(ckj[0])==0 and int(ckj[1])==0: chk=chk+u'整' elif int(ckj[0])!=0 and int(ckj[1])!=0: chk=chk+self.gdict[int(ckj[0])]+u'角'+self.gdict[int(ckj[1])]+u'分' else: chk=chk+self.gdict[int(ckj[0])]+u'角整' return chk if __name__=='__main__': pt=cnumber() print pt.cwchange('600190101000.80')
结果如下:
- 用Python将数字转换为中文大写
- 将人民币数字转换为中文大写
- python 转换数字为中文的大写
- 数字转换为中文大写
- 数字转换为中文大写
- 数字转换为中文大写
- 将数字金额转换为中文大写金额
- C#使用正则表达式将数字转换为大写中文
- C# 将小写数字转换为 一般中文大写数字 和 人民币大写数字
- 怎么将数字转换成中文大写
- 用JavaScript将数字转换为大写金额
- 用JavaScript将数字转换为大写金额
- 将数字转换为大写金额
- 将数字转换为大写金额
- 将数字字符串转换为人民币大写
- C#将数字转换为大写
- .net 将数字转换为人民币大写
- JavaScript将数字转换为大写金额
- spring没有整合最新的mybatis
- 双层 not exist 嵌套
- 通过源码学算法--AdaBoost (CART) -- do_learn_nu.m
- Reservoir Sampling
- 【ci框架】单一入口文件index.php分析
- 用Python将数字转换为中文大写
- LM4F120 2.5.4 向量表
- IMIE(international moble equipment Identity )
- 堆栈在内存中的压栈和弹栈工作原理
- Linear Space Sequence Alignment
- 从业N年初次用到高等数学:用PL/SQL算IRR
- XML文件在Android中的重要作用(从文件存放形式剖析)
- Compiling Java with makefile
- JRebel+4.0.3破解版