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

编写价格处理正则表达式:替换逗号并保留两位小数

解决方案

分步处理逻辑

需求可以拆为两个独立步骤,分步处理更直观,也能避免复杂正则带来的错误:

  1. 统一小数点格式:把输入中所有逗号替换为点,解决格式不一致问题;
  2. 截断超长小数位:对标准化后的字符串,仅保留小数点后最多两位数字,多余部分直接截断。

代码实现示例

JavaScript版本

function formatPrice(input) {
    // 第一步:将所有逗号替换为小数点
    let normalized = input.replace(/,/g, '.');
    // 第二步:截断小数点后超过两位的部分
    normalized = normalized.replace(/\.(\d{2})\d+/, '.$1');
    return normalized;
}

// 测试验证
console.log(formatPrice('6554,43553')); // 输出:6554.43
console.log(formatPrice('123.4567'));   // 输出:123.45
console.log(formatPrice('789'));        // 输出:789
console.log(formatPrice('987,6'));      // 输出:987.6

Python版本

import re

def format_price(input_str):
    # 替换逗号为小数点
    normalized = input_str.replace(',', '.')
    # 截断超长小数位
    normalized = re.sub(r'\.(\d{2})\d+', r'.\1', normalized)
    return normalized

# 测试验证
print(format_price('6554,43553'))  # 输出:6554.43

正则规则说明

  • 替换逗号的正则 /g 标识是全局匹配,确保所有逗号都被替换;
  • 截断小数位的正则 \.(\d{2})\d+:
    • \. 匹配小数点;
    • (\d{2}) 捕获小数点后前两位数字;
    • \d+ 匹配后面多余的数字;
    • 替换为 .$1 时,仅保留小数点和捕获到的两位数字,实现截断效果。

特殊情况说明

如果输入包含千分位逗号(比如1,234.5678),需要先移除千分位逗号再处理:

// 先移除千分位逗号
let normalized = input.replace(/(\d),(?=\d{3})/g, '$1');
// 再执行后续替换和截断步骤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:05:12