You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中完善format_number函数:支持K/M格式字符串转整数

改进后的format_number函数实现

你的需求核心是先区分纯数字字符串和带单位(K/M)的字符串,再分别处理。原函数思路没问题,但存在大小写兼容、逻辑严谨性的小问题,下面是优化后的代码:

import re

def format_number(number):
    """
    格式化数字字符串:处理逗号分隔、K/M单位转换、移除小数点,最终返回整数
    :param number: 输入的数字字符串,支持格式如"30K"、"2M"、"1,234"、"3.5K"
    :return: 转换后的整数
    """
    # 预处理:去掉逗号,统一转小写(兼容大写K/M输入)
    processed = number.replace(",", "").lower()
    
    # 匹配带K/M单位的字符串
    unit_match = re.match(r'^(\d+\.?\d*)(k|m)$', processed)
    if unit_match:
        num_part, unit = unit_match.groups()
        # 移除小数点,把数字转成纯数字串(比如"3.5"转为"35")
        num_str = num_part.replace(".", "")
        # 根据单位补对应数量的零
        if unit == 'k':
            num_str += '00' if '.' in num_part else '000'
        elif unit == 'm':
            num_str += '00000' if '.' in num_part else '000000'
        return int(num_str)
    else:
        # 纯数字场景:直接移除小数点后转整数
        pure_num = processed.replace(".", "")
        return int(pure_num)

关键优化点

  • 大小写兼容:统一转小写,不管输入是"30K"还是"30k"都能正常处理
  • 严谨的单位匹配:用正则从字符串开头匹配,只处理结尾带K/M的情况,避免误替换字符串中间的字符
  • 清晰分支逻辑:先判断是否带单位再分别处理,比原函数的顺序替换更易读、易维护
  • 鲁棒性提升:明确区分带小数点和不带小数点的单位转换逻辑,避免出错

测试示例

print(format_number("30K"))      # 输出30000
print(format_number("2M"))       # 输出2000000
print(format_number("1,234"))    # 输出1234
print(format_number("3.5K"))     # 输出3500
print(format_number("500"))      # 输出500
print(format_number("1.2M"))     # 输出1200000

原函数的小问题说明

原函数的正则r"(k)$"仅匹配小写k,无法处理大写K;全局替换逻辑可能会误处理字符串中间的k/m字符(虽然你的场景大概率不会出现,但严谨性不足),用re.match从开头匹配可以规避这个问题。

内容的提问来源于stack exchange,提问作者Robz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:53:18