Python实现把数字转换成中文
周末在家,写了个小程序,用于将阿拉伯数字转换化大写中文。程序没经过任何优化,出没经过详细的测试,挂到网上,方便将来有需要的时候直接拿来用。
#!/usr/bin/python #-*-encoding:utf-8-*- importtypes classNotIntegerError(Exception): pass classOutOfRangeError(Exception): pass _MAPPING=(u'零',u'一',u'二',u'三',u'四',u'五',u'六',u'七',u'八',u'九',) _P0=(u'',u'十',u'百',u'千',) _S4,_S8,_S16=10**4,10**8,10**16 _MIN,_MAX=0,9999999999999999 def_to_chinese4(num): '''转换[0,10000)之间的阿拉伯数字 ''' assert(0<=numandnum<_S4) ifnum<10: return_MAPPING[num] else: lst=[] whilenum>=10: lst.append(num%10) num=num/10 lst.append(num) c=len(lst)#位数 result=u'' foridx,valinenumerate(lst): ifval!=0: result+=_P0[idx]+_MAPPING[val] ifidx<c-1andlst[idx+1]==0: result+=u'零' returnresult[::-1].replace(u'一十',u'十') def_to_chinese8(num): assert(num<_S8) to4=_to_chinese4 ifnum<_S4: returnto4(num) else: mod=_S4 high,low=num/mod,num%mod iflow==0: returnto4(high)+u'万' else: iflow<_S4/10: returnto4(high)+u'万零'+to4(low) else: returnto4(high)+u'万'+to4(low) def_to_chinese16(num): assert(num<_S16) to8=_to_chinese8 mod=_S8 high,low=num/mod,num%mod iflow==0: returnto8(high)+u'亿' else: iflow<_S8/10: returnto8(high)+u'亿零'+to8(low) else: returnto8(high)+u'亿'+to8(low) defto_chinese(num): iftype(num)!=types.IntTypeandtype(num)!=types.LongType: raiseNotIntegerError(u'%sisnotainteger.'%num) ifnum<_MINornum>_MAX: raiseOutOfRangeError(u'%doutofrange[%d,%d)'%(num,_MIN,_MAX)) ifnum<_S4: return_to_chinese4(num) elifnum<_S8: return_to_chinese8(num) else: return_to_chinese16(num) if__name__=='__main__': printto_chinese(9000)