如何使用JavaScript将1k、3k、7m等格式化数值转换为纯数字
实现格式化数值转纯数字的JavaScript方案
可以写一个通用函数处理这类带k/m/b后缀的格式化数值,核心逻辑是匹配后缀对应的倍率,将数值部分转换后乘以倍率即可:
核心实现代码
function parseFormattedNumber(str) { // 定义后缀与倍率的映射,支持大小写输入 const multipliers = { k: 1000, m: 1000000, b: 1000000000 }; // 正则提取数字部分(整数/小数)和后缀,兼容无后缀的纯数字 const match = str.trim().toLowerCase().match(/^(\d+\.?\d*)([kmb])?$/); if (!match) return NaN; // 匹配失败返回NaN const [, numStr, suffix] = match; const num = parseFloat(numStr); if (isNaN(num)) return NaN; // 有后缀则乘对应倍率,无后缀直接返回原数字 return suffix ? num * multipliers[suffix] : num; }
代码说明
- 用
toLowerCase()统一处理大小写,不管输入是1M还是1m都能识别 - 正则表达式
/^(\d+\.?\d*)([kmb])?$/可匹配两类内容:- 纯数字(比如
123、45.67) - 带
k/m/b后缀的格式化数值(比如100k、3.789m)
- 纯数字(比如
- 匹配失败或数字部分无效时返回
NaN,方便后续做错误处理
测试示例
代入你给出的测试值,运行结果如下:
console.log(parseFormattedNumber('1m')); // 1000000 console.log(parseFormattedNumber('2m')); // 2000000 console.log(parseFormattedNumber('3.789m')); // 3789000 console.log(parseFormattedNumber('100k')); // 100000 console.log(parseFormattedNumber('20k')); // 20000 console.log(parseFormattedNumber('80.5b')); // 80500000000 console.log(parseFormattedNumber('1k')); // 1000 console.log(parseFormattedNumber('10.2m')); // 10200000
内容的提问来源于stack exchange,提问作者AkT
相关产品推荐
相关产品推荐

