#!/usr/bin/python
# -*- coding: UTF-8 -*-
num_map = {
    '一': 1, '二': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九': 9,
    '十': 10, '百': 100, '千': 1000, '万': 10000, '亿': 100000000,
}

def sectionChinese(str):
    res = 0
    sectionNum = 0
    for i in range(len(str)):
        v = num_map.get(str[i])
        if v<=9 and v>=0:
            sectionNum = v
            if i == len(str) - 1:
                res=res+sectionNum
        elif v == 10 or v==100 or v==1000:
            # 处理"十"开头的
            if i == 0:
                sectionNum = 1
            sectionNum = sectionNum * v
            res = res+sectionNum
    return res

def ChineseToNumber(string):
    if "零" in string:
        string = string.replace("零","")
    flag = False
    k = 0
    str1 = ''
    str2 = ''
    str3 = ''
    for i in range(len(string)):
        if string[i] == "亿":
            k = i+1
            str1 = string[0:i]
            flag = True
            if "万" not in string and i+1 < len(string):
                str3 = string[i+1:]
        elif string[i] == "万":
            str2 = string[k:i]
            if i+1 < len(string):
                str3 = string[i+1:]
            flag = True
    if not flag:
        str3 = string
    result = sectionChinese(str1)*100000000+sectionChinese(str2)*10000+sectionChinese(str3)
    return result
String= ["三","六","八","二十","八十","一百","三百","一千","一万","十万","三十万","二十万","三百万",
         "一亿","十亿","二十亿","四百亿","四千亿","二十三","四十五","三十六","三百二十","六百三十",
         "八百九十","三千六百二十","五千七百三十","一万二千二百三十六","十万八千六百三十四","二十万三千",
         "二十万零三千","一百万零八千零六十","七百万零五十六","四百万","一千万零八百六十四","八千万零九百八十二",
         "一亿零八十","一亿八千六百三十二万三千六百五十二","十亿六千零五十四万三千","九亿零八百六十二","三百亿",
         "三百亿零四百八十万三千六百二十","三百亿零三十","三百亿三千万","三百亿零三万"]
for string in String:
    print (string+"--->"+str(ChineseToNumber(string)))
"""
输出:
三--->3
六--->6
八--->8
二十--->20
八十--->80
一百--->100
三百--->300
一千--->1000
一万--->10000
十万--->100000
三十万--->300000
二十万--->200000
三百万--->3000000
一亿--->100000000
十亿--->1000000000
二十亿--->2000000000
四百亿--->40000000000
四千亿--->400000000000
二十三--->23
四十五--->45
三十六--->36
三百二十--->320
六百三十--->630
八百九十--->890
三千六百二十--->3620
五千七百三十--->5730
一万二千二百三十六--->12236
十万八千六百三十四--->108634
二十万三千--->203000
二十万零三千--->203000
一百万零八千零六十--->1008060
七百万零五十六--->7000056
四百万--->4000000
一千万零八百六十四--->10000864
八千万零九百八十二--->80000982
一亿零八十--->100000080
一亿八千六百三十二万三千六百五十二--->186323652
十亿六千零五十四万三千--->1060543000
九亿零八百六十二--->900000862
三百亿--->30000000000
三百亿零四百八十万三千六百二十--->30004803620
三百亿零三十--->30000000030
三百亿三千万--->30030000000
三百亿零三万--->30000030000
"""

思路:

参考:https://blog.csdn.net/a897180673/article/details/79364584

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐