Python问题6——将汉字数字转换成阿拉伯数字的方法

本文介绍了一种使用Python将汉字数字转换为阿拉伯数字的方法。通过定义汉字数字和单位的映射,实现了从简单数字到复杂数量级(如兆)的转换。文章提供了详细的代码示例,包括如何处理特殊单位如‘万’、‘亿’和‘兆’。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#Python问题6——Python将汉字数字转换成阿拉伯数字的方法
今天2019元旦,写个小程序需要用到汉字数字转换成阿拉伯数字转换,从网上找了一个修改后实现此功能。
#Python将汉字数字转换成阿拉伯数字的方法
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 cn2dig(cn):
    lcn = list(cn)
    unit = 0   # 当前的单位
    ldig = []  # 临时数组
 
    while lcn:
         cndig = lcn.pop()
         if  cndig in CN_UNIT:
            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))

### 实现SQL查询结果中数字转换为汉字方法 要将SQL查询结果中的数字转换为汉字,可以采用Python编程语言结合已有的汉字编码知识[^2]以及SQL处理逻辑完成此操作。以下是具体实现方式: #### 方法概述 通过定义个映射表,将阿拉伯数字对应到对应的汉字字符。随后,在SQL查询返回的结果集中遍历每项数据,对于其中的数值字段执行替换操作。 #### 映射表设计 创建个简单的列表或者字典作为基础映射工具,用于存储从`0-9`至其相应汉字形式之间的关系。 ```python num_to_chinese = { 0: '零', 1: '', 2: '二', 3: '三', 4: '四', 5: '五', 6: '六', 7: '七', 8: '八', 9: '九' } ``` #### 函数开发 编写个辅助函数 `convert_number_to_chinese(number)` 来接收整数参数,并利用上述映射表将其转化为完整的汉字表达式。 ```python def convert_number_to_chinese(number): chinese_str = "" str_num = str(abs(int(number))) # Convert to string and handle absolute value for digit in str_num: chinese_digit = num_to_chinese[int(digit)] chinese_str += chinese_digit if number < 0: chinese_str = "负" + chinese_str # Add negative sign handling return chinese_str ``` #### 结合SQL查询结果集 假设已经有个名为`results`的数据结构保存着来自数据库的记录集合,则可以通过如下代码片段展示如何应用该功能于实际场景之中。 ```python import sqlite3 conn = sqlite3.connect('example.db') cursor = conn.cursor() query = "SELECT id, salary FROM employees;" cursor.execute(query) rows = cursor.fetchall() converted_results = [] for row in rows: converted_row = list(row) for i, item in enumerate(converted_row): if isinstance(item, int): # Check whether the element is an integer. converted_row[i] = convert_number_to_chinese(item) converted_results.append(tuple(converted_row)) print(converted_results) ``` 以上脚本实现了基本的功能需求——即把SQL语句检索出来的所有整型数据都替换成它们各自的中文表述形式[^1]。 #### 注意事项 当面对更复杂的业务情况时(比如浮点数、科学计数法表示的大数),可能还需要进步扩展当前算法的能力范围;另外考虑到性能因素,在大规模数据量下应审慎评估这种方法的实际可行性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值