如何在JavaScript中灵活转换多格式货币为数字?
实现灵活的JavaScript货币转数字方法
针对你需要处理多种货币格式转数字的需求,这里提供一个能识别不同千分位、小数点分隔符以及货币符号的函数:
function convertCurrencyToNumber(input) { // 输入已是数字,直接返回(保留两位小数对齐示例输出) if (typeof input === 'number') { return Number(input.toFixed(2)); } // 过滤掉所有非数字、逗号、点的字符(比如$这类货币符号) const cleanedInput = input.replace(/[^0-9.,]/g, ''); // 通过最后一个分隔符的位置判断格式类型 const lastCommaPos = cleanedInput.lastIndexOf(','); const lastDotPos = cleanedInput.lastIndexOf('.'); let processedStr; if (lastCommaPos > lastDotPos) { // 逗号是小数点,点是千分位分隔符(如1.000,50) processedStr = cleanedInput.replace(/\./g, '').replace(',', '.'); } else { // 点是小数点,逗号是千分位分隔符(如1,000.50) processedStr = cleanedInput.replace(/,/g, ''); } // 转成数字并保留两位小数 return Number(parseFloat(processedStr).toFixed(2)); }
测试示例
convertCurrencyToNumber("1.000,50")→ 返回1000.50convertCurrencyToNumber("$1.000,50")→ 返回1000.50convertCurrencyToNumber("1,000.50")→ 返回1000.50convertCurrencyToNumber("$1,000.50")→ 返回1000.50convertCurrencyToNumber(1000.50)→ 返回1000.50
逻辑说明
- 先判断输入类型,数字直接处理后返回;
- 字符串先清理掉货币符号等无关字符,只保留数字、逗号和点;
- 通过最后一个逗号和点的位置,区分两种常见的货币格式:
- 若最后一个逗号在点之后,说明逗号是小数点,点是千分位分隔符,先去掉所有点,再把逗号换成标准小数点;
- 反之则去掉所有逗号,保留点作为小数点;
- 最后转成数字并保留两位小数,和期望输出格式一致。
内容的提问来源于stack exchange,提问作者Suitescripter
相关产品推荐
相关产品推荐

