十进制数转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
相关产品推荐
相关产品推荐

