Python 中文(大写)数字转阿拉伯数字(转)
# constants for chinese_to_arabic CN_NUM = { '〇' : 0, '一' : 1, '二' : 2, '三' : 3, '四' : 4, '五' : 5, '六' : 6, '七' : 7, '八' : 8, '九' : 9, '零' : 0, '壹' : 1, '贰' : 2, '叁' : 3, '肆' : 4, '伍' : 5, '陆' : 6, '柒' : 7, '捌' : 8, '玖' : 9, '貮' : 2, '两' : 2, } CN_UNIT = { '十' : 10, '拾' : 10, '百' : 100, '佰' : 100, '千' : 1000, '仟' : 1000, '万' : 10000, '萬' : 10000, '亿' : 100000000, '億' : 100000000, '兆' : 1000000000000, } def chinese_to_arabic(cn:str) -> int: unit = 0 # current ldig = [] # digest for cndig in reversed(cn): if cndig in CN_UNIT: unit = CN_UNIT.get(cndig) if unit == 10000 or unit == 100000000: ldig.append(unit) unit = 1 else: dig = CN_NUM.get(cndig) if unit: dig *= unit unit = 0 ldig.append(dig) if unit == 10: ldig.append(10) val, tmp = 0, 0 for x in reversed(ldig): if x == 10000 or x == 100000000: val += tmp * x tmp = 0 else: tmp += x val += tmp return val # TODO: make a full unittest def test(): test_dig = ['八', '十一', '一百二十三', '一千二百零三', '一万一千一百零一', '十万零三千六百零九', '一百二十三万四千五百六十七', '一千一百二十三万四千五百六十七', '一亿一千一百二十三万四千五百六十七', '一百零二亿五千零一万零一千零三十八'] for cn in test_dig: x = chinese_to_arabic(cn) print(cn, x) assert x == 10250011038 if __name__ == '__main__': test()
八 8
十一 11
一百二十三 123
一千二百零三 1203
一万一千一百零一 11101
十万零三千六百零九 103609
一百二十三万四千五百六十七 1234567
一千一百二十三万四千五百六十七 11234567
一亿一千一百二十三万四千五百六十七 111234567
一百零二亿五千零一万零一千零三十八 10250011038
---------------------
作者:HexRain
来源:CSDN
原文:https://blog.csdn.net/hexrain/article/details/52790126
版权声明:本文为博主原创文章,转载请附上博文链接!