Home > Backend Development > Python Tutorial > python中将阿拉伯数字转换成中文的实现代码

python中将阿拉伯数字转换成中文的实现代码

WBOY
Release: 2016-06-06 11:27:30
Original
2335 people have browsed it

代码如下:


#!/usr/bin/python
#-*- encoding: utf-8 -*-
import types
class NotIntegerError(Exception):
pass
class OutOfRangeError(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 if num return _MAPPING[num]
else:
lst = [ ]
while num >= 10:
lst.append(num % 10)
num = num / 10
lst.append(num)
c = len(lst) # 位数
result = u''
for idx, val in enumerate(lst):
if val != 0:
result += _P0[idx] + _MAPPING[val]
if idx result += u'零'
return result[::-1].replace(u'一十', u'十')
def _to_chinese8(num):
assert(num to4 = _to_chinese4
if num return to4(num)
else:
mod = _S4
high, low = num / mod, num % mod
if low == 0:
return to4(high) + u'万'
else:
if low return to4(high) + u'万零' + to4(low)
else:
return to4(high) + u'万' + to4(low)
def _to_chinese16(num):
assert(num to8 = _to_chinese8
mod = _S8
high, low = num / mod, num % mod
if low == 0:
return to8(high) + u'亿'
else:
if low return to8(high) + u'亿零' + to8(low)
else:
return to8(high) + u'亿' + to8(low)
def to_chinese(num):
if type(num) != types.IntType and type(num) != types.LongType:
raise NotIntegerError(u'%s is not a integer.' % num)
if num _MAX:
raise OutOfRangeError(u'%d out of range[%d, %d)' % (num, _MIN, _MAX))
if num return _to_chinese4(num)
elif num return _to_chinese8(num)
else:
return _to_chinese16(num)
if __name__ == '__main__':
print to_chinese(9000)


把金额小写转换成大写的Python代码
功能将小于十万亿元的小写金额转换为大写
代码

代码如下:


  def IIf( b, s1, s2):
  if b:
    return s1
  else:
    return s2
def num2chn(nin=None):
    cs =
('零','壹','贰','叁','肆','伍','陆','柒','捌','玖','◇','分','角','圆','拾','佰','仟',
'万','拾','佰','仟','亿','拾','佰','仟','万')
    st = ''; st1=''
    s = '%0.2f' % (nin)    
    sln =len(s)
    if sln >; 15: return None
    fg = (nin    for i in range(0, sln-3):
        ns = ord(s[sln-i-4]) - ord('0')
        st=IIf((ns==0)and(fg or (i==8)or(i==4)or(i==0)), '', cs[ns])
      + IIf((ns==0)and((i;8)and(i;4)and(i;0)or fg
and(i==0)),'', cs[i+13])
      + st
        fg = (ns==0)
    fg = False
    for i in [1,2]:
        ns = ord(s[sln-i]) - ord('0')
        st1 = IIf((ns==0)and((i==1)or(i==2)and(fg or (nin       + IIf((ns>;0), cs[i+10], IIf((i==2) or fg, '', '整'))
       + st1
        fg = (ns==0)
    st.replace('亿万','万')
    return IIf( nin==0, '零', st + st1)
if __name__ == '__main__':
  num = 12340.1
  print num
  print num2chn(num)

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template