玩蛇网提供最新Python编程技术信息以及Python资源下载!

Python将汉字数字转换成阿拉伯数字的方法

python 培训

Python语言来为不同数字之间做转换之前就有介绍过,今天分享的是用Python将汉字数字转换成阿拉伯数字的方法。汉字数字就是我们的大写数字:零、壹、贰、叁、肆、伍、陆、柒、捌、玖、拾,这种只有在会计人员才会常用的数字。

Python把用汉字表示的数字转换为阿拉伯数字前,需要先用到字典形式,做个对照好方便我们查找转换。

Python 数字转换

Python将汉字数字转换成阿拉伯数字的方法,源码如下(供参考):

CN_NUM = {
u'〇' : 0,
u'一' : 1,
u'二' : 2,
u'三' : 3,
u'四' : 4,
u'五' : 5,
u'六' : 6,
u'七' : 7,
u'八' : 8,
u'九' : 9,

u'零' : 0,
u'壹' : 1,
u'贰' : 2,
u'叁' : 3,
u'肆' : 4,
u'伍' : 5,
u'陆' : 6,
u'柒' : 7,
u'捌' : 8,
u'玖' : 9,

u'貮' : 2,
u'两' : 2,
}
CN_UNIT = {
u'十' : 10,
u'拾' : 10,
u'百' : 100,
u'佰' : 100,
u'千' : 1000,
u'仟' : 1000,
u'万' : 10000,
u'萬' : 10000,
u'亿' : 100000000,
u'億' : 100000000,
u'兆' : 1000000000000,
}


def cn2dig(cn):
    lcn = list(cn)
    unit = 0 #当前的单位
    ldig = []#临时数组

    while lcn:
        cndig = lcn.pop()

        if CN_UNIT.has_key(cndig):
            unit = CN_UNIT.get(cndig)
            if unit==10000:
                ldig.append('w')    #标示万位
                unit = 1
            elif unit==100000000:
                ldig.append('y')    #标示亿位
                unit = 1
            elif unit==1000000000000:#标示兆位
                ldig.append('z')
                unit = 1

            continue

        else:
            dig = CN_NUM.get(cndig)

            if unit:
                dig = dig*unit
                unit = 0

            ldig.append(dig)

    if unit==10:    #处理10-19的数字
        ldig.append(10)
    
    ret = 0
    tmp = 0

    while ldig:
        x = ldig.pop()

        if x=='w':
            tmp *= 10000
            ret += tmp
            tmp=0

        elif x=='y':
            tmp *= 100000000
            ret += tmp
            tmp=0

        elif x=='z':
            tmp *= 1000000000000
            ret += tmp
            tmp=0

        else:
            tmp += x

    ret += tmp
    return ret

    #ldig.reverse()
    #print ldig
    #print CN_NUM[u'七']


if __name__ == '__main__':

    test_dig = [u'九',
                u'十一',
                u'一百二十三',
                u'一千二百零三',
                u'一万一千一百零一',
                u'十万零三千六百零九',
                u'一百二十三万四千五百六十七',
                u'一千一百二十三万四千五百六十七',
                u'一亿一千一百二十三万四千五百六十七',
                u'一百零二亿五千零一万零一千零三十八',
                u'一千一百一十一亿一千一百二十三万四千五百六十七',
                u'一兆一千一百一十一亿一千一百二十三万四千五百六十七',
                ]

    for cn in test_dig: 

        print cn2dig(cn)

Python数字转换相关文章推荐:
1、用Python将罗马数字转换为阿拉伯数字的方法
2、Python实现金额大小写转换的方法

玩蛇网原创,转载请注明文章出处和来源网址:http://www.iplaypython.com/code/base/b2600.html



微信公众号搜索"玩蛇网Python之家"加关注,每日最新的Python资讯、图文视频教程可以让你一手全掌握。强烈推荐关注!

微信扫描下图可直接关注

玩蛇网Python新手QQ群,欢迎加入: ① 240764603 玩蛇网Python新手群
文章发布日期:2016-01-08 14:30 玩蛇网 www.iplaypython.com

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
  • 笔记之神
    2016-07-05 12:19:00发表

    学习了,谢谢!

相关文章推荐
别人正在看
特别推荐
去顶部去底部