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

如何将带货币格式的字符串转换为BigDecimal?

当然有可行的方案!这种带美元符号和千分位分隔符的字符串直接用new BigDecimal(String)肯定会抛出NumberFormatException,因为它只认纯数字格式的输入。下面给你两种实用的解决思路,按需选择就行:

方案一:使用DecimalFormat解析(推荐通用场景)

这是处理本地化数字/货币格式的标准做法,能自动识别货币符号、千分位分隔符和小数点,兼容性更强。关键是要指定正确的Locale(这里用US Locale对应美元格式),并且开启setParseBigDecimal(true)来直接返回BigDecimal,避免转成Double带来的精度损失。

示例代码:

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.Locale;

public class CurrencyConverter {
    public static void main(String[] args) {
        String currencyInput = "$1,234.00";
        
        // 获取适配美元格式的DecimalFormat实例
        DecimalFormat currencyFormatter = (DecimalFormat) DecimalFormat.getCurrencyInstance(Locale.US);
        // 设置直接解析为BigDecimal,避免精度丢失
        currencyFormatter.setParseBigDecimal(true);
        
        try {
            BigDecimal result = (BigDecimal) currencyFormatter.parse(currencyInput);
            System.out.println(result); // 输出: 1234.00
        } catch (ParseException e) {
            // 处理格式错误的情况
            e.printStackTrace();
        }
    }
}
方案二:手动清理字符串(适合格式固定的简单场景)

如果你的输入格式完全固定(比如永远是$开头,千分位用逗号,小数点用点),可以直接清理掉非数字和小数点的字符,再转成BigDecimal。这种方法简单直接,但灵活性差,一旦格式变化就会失效。

示例代码:

import java.math.BigDecimal;

public class SimpleCurrencyConverter {
    public static void main(String[] args) {
        String currencyInput = "$1,234.00";
        
        // 移除美元符号和千分位逗号
        String cleanedNumber = currencyInput.replace("$", "").replace(",", "");
        BigDecimal result = new BigDecimal(cleanedNumber);
        
        System.out.println(result); // 输出: 1234.00
    }
}

额外注意事项

  • 不管用哪种方法,都要做好异常处理:如果输入字符串格式不符合预期(比如$1,234.或者$abc),都会抛出异常,记得捕获并处理。
  • 如果你需要处理其他地区的货币格式,只需要把Locale换成对应地区的(比如Locale.CHINA处理人民币格式)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:32:29