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

如何将K、M、B格式字符串转为纯数字?求简洁实现方案

简洁实现带K/M/B后缀的字符串转数字(大小写不敏感)

核心思路

不用繁琐的switch case分支,通过正则表达式提取数字与后缀+映射表匹配倍率的方式实现,代码更简洁易维护,还天然支持大小写不敏感。

Python 实现

import re

def str_to_num(s):
    # 定义后缀对应的倍率,统一转小写处理
    suffix_map = {'k': 1000, 'm': 10**6, 'b': 10**9}
    # 正则匹配:数字部分(整数/小数)+ 可选后缀(大小写不敏感)
    match = re.match(r'^(\d+\.?\d*)([kmb]?)$', s.strip(), re.IGNORECASE)
    if not match:
        raise ValueError("Invalid input format")
    
    num_part, suffix = match.groups()
    num = float(num_part)
    # 无后缀则直接返回,有后缀则乘以对应倍率后转整数(匹配示例需求)
    if suffix:
        return int(num * suffix_map[suffix.lower()])
    return int(num) if num.is_integer() else num

JavaScript 实现

function strToNum(s) {
    const suffixMap = {'k': 1000, 'm': 1e6, 'b': 1e9};
    // 正则匹配数字和后缀,忽略大小写
    const match = s.trim().match(/^(\d+\.?\d*)([kmb]?)$/i);
    if (!match) throw new Error('Invalid input format');
    
    const [, numPart, suffix] = match;
    let num = parseFloat(numPart);
    if (suffix) {
        num *= suffixMap[suffix.toLowerCase()];
        // 示例中结果均为整数,这里做取整处理
        return Number.isInteger(num) ? num : Math.round(num);
    }
    return Number.isInteger(num) ? num : num;
}

测试验证

输入输出完全匹配需求:

786 → 786
2423 → 2423
1k → 1000
5.816k → 5816
10.61k → 10610
2.5m → 2500000
1.250064b → 1250064000
1K → 1000
3.2M → 3200000

说明

  • 正则表达式^(\d+\.?\d*)([kmb]?)$确保匹配整数、小数,以及可选的K/M/B后缀,re.IGNORECASE(Python)或i标志(JS)实现大小写不敏感。
  • 映射表可灵活扩展(比如添加'T'代表万亿),比switch case更易维护。
  • 结果根据示例需求转为整数,若需保留小数可去掉int()或取整逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:54:57