Lua如何将带K/M/B后缀的字符串转换为对应整数值
带K/M/B后缀字符串转整数值 Lua 实现方案
完整实现代码
local function parse_unit_str(input) -- 定义后缀对应的倍率 local unit_map = { k = 1000, m = 1000000, b = 1000000000 } -- 统一转小写处理,兼容大写后缀输入 local lower_input = input:lower() -- 同时匹配数字部分(支持小数)和单位后缀 local num_str, unit = lower_input:match('^([%d%.]+)([kmb])$') if num_str and unit then local num = tonumber(num_str) -- 若需要返回字符串类型结果,直接用tostring包裹计算结果即可 return num * unit_map[unit] end -- 无后缀的合法数字直接返回对应数值 return tonumber(input) end
代码说明
- 用映射表统一管理单位倍率,后续需要扩展其他单位仅需修改
unit_map即可 - 匹配模式
^([%d%.]+)([kmb])$同时提取数值部分和后缀,自动过滤不符合格式的输入,避免误转换 - 输入提前转小写处理,天然兼容大写后缀输入,比如
12K/1.5M/3B都可以正常识别 - 支持带小数的输入,比如
1.5k会正确转换为1500 - 无后缀的合法数字字符串会直接返回对应数值,兼容普通数字输入场景
原有代码问题说明
- 仅匹配了小写k,不支持M/B单位和大写后缀
- 只提取了整数部分,带小数的输入会被截断,比如
1.5k只会提取到数字1 - 没有做倍率计算,仅提取了原始数字部分,未完成最终的转换逻辑
测试示例
print(parse_unit_str("12k")) -- 输出 12000 print(parse_unit_str("1.5M")) -- 输出 1500000 print(parse_unit_str("2B")) -- 输出 2000000000 print(parse_unit_str("999")) -- 输出 999
内容的提问来源于stack exchange,提问作者CherryPicker
相关产品推荐
相关产品推荐

