聘我网

新概念招聘3.0

如何实现一个数字到文字转换的程序?

vote up0vote downstar

比如输入85478992

那么输出就该为八千五百四十七万八千九百九十二

有没现成的案例可学?

 

1 个答复

vote up0vote downcheck

有个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)
链接

您的回答





不是您要找的问题? 浏览其他含有标签 的问题或者 自己问个.