Python將阿拉伯數字轉化為中文大寫

來源:互聯網
上載者:User

利用Python將阿拉伯數字轉化為中文大寫,其實最麻煩的地方就是中間空多個0的問題,這種情況下,採用拆分法則,將一個大數字,先拆分成整數部分和小數部分,再對整數部分按照仟、萬、億、兆分位拆分為四個字串組成的List,每個字串最多4個字元,然後對每個分位的字串用大寫函數轉換成大寫,最後合并,這樣等於縮減了問題,處理就相對簡單了。

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091#!/usr/bin/env python# -*- coding: utf-8 -*-'''#演算法說明:要求字串輸入,現將字串差費為整數部分和小數部分產生list[整數部分,小數部分]#將整數部分拆分為:[億,萬,仟]三組字串組成的List:['0000','0000','0000'](根據實際輸入產生階梯List)#例如:600190000010.70整數部分拆分為:['600','1900','0010']#然後對list中每個字串分組進行大寫化再合并#最後處理小數部分的大寫化'''classcnumber: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'玖'}defcsplit(self,cdata):#拆分函數,將整數字串拆分成[億,萬,仟]的listg=len(cdata)%4csdata=[]lx=len(cdata)-1ifg>0:csdata.append(cdata[0:g])k=gwhilek<=lx:csdata.append(cdata[k:k+4])k+=4returncsdatadefcschange(self,cki):#對[億,萬,仟]的list中每個字串分組進行大寫化再合并lenki=len(cki)i=0lk=lenkichk=u''foriinrange(lenki):ifint(cki[i])==0:ifi<lenki-1:ifint(cki[i+1])!=0:chk=chk+self.gdict[int(cki[i])]else:chk=chk+self.gdict[int(cki[i])]+self.cdict[lk]lk-=1returnchkdefcwchange(self,data):cdata=str(data).split('.')cki=cdata[0]iflen(cdata)==1:i=0chk=u''cski=self.csplit(cki)#分解字元數組[億,萬,仟]三組List:['0000','0000','0000']ikl=len(cski)#擷取拆分後的List長度#大寫合并foriinrange(ikl):ifself.cschange(cski[i])=='':#有可能一個字串全是0的情況chk=chk+self.cschange(cski[i])#此時不需要將數位識別碼符引入else:chk=chk+self.cschange(cski[i])+self.xdict[ikl-i]#合并:前字串大寫+當前字串大寫+標識符chk=chk+u'整'else:i=0chk=u''cski=self.csplit(cki)#分解字元數組[億,萬,仟]三組List:['0000','0000','0000']ikl=len(cski)#擷取拆分後的List長度#大寫合并foriinrange(ikl):ifself.cschange(cski[i])=='':#有可能一個字串全是0的情況chk=chk+self.cschange(cski[i])#此時不需要將數位識別碼符引入else:chk=chk+self.cschange(cski[i])+self.xdict[ikl-i]#合并:前字串大寫+當前字串大寫+標識符#處理小數部分ckj=cdata[1]lenkj=len(ckj)iflenkj==1:#若小數只有1位ifint(ckj[0])==0:chk=chk+u'整'else:chk=chk+self.gdict[int(ckj[0])]+u'角整'else:#若小數有兩位的四種情況ifint(ckj[0])==0andint(ckj[1])!=0:chk=chk+u'零'+self.gdict[int(ckj[1])]+u'分'elifint(ckj[0])==0andint(ckj[1])==0:chk=chk+u'整'elifint(ckj[0])!=0andint(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'角整'returnchkif__name__=='__main__':pt=cnumber()printpt.cwchange('123410505632.09').encode('utf-8')

本文參照網上的一些寫法做了一些改動,使用起來更加嚴謹。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.