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

十进制数转Double时触发NumberFormatException问题求助

问题分析与修复方案

嘿,这个NumberFormatException我太熟了!问题出在你用Double.valueOf()解析的字符串带了千分位逗号分隔符(比如示例里的"97,045.1193"),Java原生的Double解析方法根本不认这种格式,自然就报错了。

为啥会报错?

数据库返回的十进制数被格式化成了带千分位逗号的字符串,但Double.valueOf()只能解析标准格式的数字(比如"97045.1193"),碰到逗号就直接懵了,抛出转换异常。

怎么修复?

咱们用DecimalFormat来搞定这个问题,它专门用来处理带格式的数字字符串,能完美识别千分位逗号。修正后的代码如下:

import java.text.DecimalFormat;
import java.text.ParseException;

// 你的其他业务代码...

try {
    // 定义支持千分位分隔的数字格式,小数位数可以按需调整
    DecimalFormat numFormatter = new DecimalFormat("#,###.########");
    
    // 解析数据库返回的带千分位的可用库存数量
    double availQty = numFormatter.parse(AQTY.getValue()).doubleValue();
    
    // 注意:如果输入的inputQty字符串也可能带千分位,同样用上面的解析方式
    double inputQty = Double.valueOf(QTY.getValue());
    // 要是inputQty也有千分位,替换成这行:
    // double inputQty = numFormatter.parse(QTY.getValue()).doubleValue();

    if (inputQty > availQty) {
        session.setStatusMessage("Not Enough Quantity");
        throw new AbortHandlerException();
    }
} catch (ParseException e) {
    // 处理格式异常的情况,比如给用户提示输入格式错误
    session.setStatusMessage("Invalid quantity format");
    throw new AbortHandlerException();
}

额外提醒

  • DecimalFormat("#,###.########")里的#,###负责识别千分位逗号,.########表示最多支持8位小数,你可以根据实际业务需求调整小数位数。
  • 一定要加上ParseException的捕获,不然万一碰到完全不符合格式的字符串,程序直接崩了可不行。
  • 别漏了检查inputQty的格式,如果它也可能带千分位,记得同样用DecimalFormat解析,别偷懒用Double.valueOf()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:25:09