#Version : PYTHON3.10
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): unit = 0 ldig = [] 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 def chinese_to_float(cn): if cn.find(u'点') > 0: int_cn = cn.split(u'点')[0] float_cn = cn.split(u'点')[-1] float_value = 0 for j in range(len(float_cn)): y = float_cn[j] dig = CN_NUM.get(y) if j == 0: n = 0.1 else: n = n * 0.1 float_value = float_value + dig * n val = chinese_to_arabic(int_cn) + float_value else: val = chinese_to_arabic(cn) return val