有个python版的,效果如下:
>>>123456
十二万三千四百五十六
>>>85478992
八千五百四十七万八千九百九十二
>>>1231231231
十二亿三千一百二十三万一千二百三十一
代码:
# coding=utf8
from re import sub
from math import ceil
chinese_digits = (u'零',u'一',u'二',u'三',u'四',u'五',u'六',u'七',u'八',u'九')
chinese_jinzhi = (u'亿亿亿',u'万亿亿',u'亿亿',u'万亿',u'亿',u'万',u'',u'千',u'百',u'十',u'')
def format_digit_with_jinzhi(digit,jinzhi):
if digit == 0:
return chinese_digits[digit]
return chinese_digits[digit] + jinzhi
def format4digits(digits,save_one_zero_at_head=False):
"""
save_one_zero_at_head 20001 一般为两万零一 而0001则为1
ingore_one_befor_ten 12 一般为 十二 而不是 一十二 但是2012 就为两
千零一十二
"""
digits = '%04d' % digits
s = ''
jinzhi_index = -4
for digit in digits:
numeric_digit = int(digit)
s += format_digit_with_jinzhi(numeric_digit,chinese_jinzhi[jinzhi_index]
)
jinzhi_index+=1
if save_one_zero_at_head:
s = sub(r"^"+u"零"+"{1,}",u'零',s)
else:
s = sub(r"^"+u"零"+"+",'',s)
s = sub(r""+u"一十",u'十',s)
s= sub(r""+u"零"+"+$",'',s)
s= sub(r""+u"零"+"{2,}",u'零',s)
return s
def render(arg):
source = sub('\D','',arg)
source_list = []
for i in range(int(ceil(len(source)/4.0))):
if i == 0:
source_list.insert(0,int(source[-4:]))
else:
source_list.insert(0,int(source[(-i-1)*4:(-i*4)]))
result = ''
old_result=''
wan_index = 5
first_part_danwei_index = wan_index - len(source_list) + 2
part_counter = 0
for part in source_list:
old_result = result
if len(source_list) > 1 and part_counter == (len(source_list) - 1):
result+=format4digits(part,save_one_zero_at_head=True)
else:
result+=format4digits(part)
if old_result != result:
result+=chinese_jinzhi[first_part_danwei_index+part_counter]
part_counter+=1
print result
while True:
q = raw_input('>>>')
if q == 'quit':
break;
else:
render(q)