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

如何解决java.lang.NumberFormatException: For input string: "396.00"报错

问题原因
  • 异常的直接触发原因是你使用Integer.parseInt()、Integer.valueOf()方法解析带小数点的字符串"396.00",Integer类仅支持解析纯整数格式的字符串,无法识别小数点和小数位,因此抛出NumberFormatException。
  • 更深层的问题是金额类数据选型错误:付款金额、总余额这类涉及财务计算的字段,使用int类型存储本身就存在精度丢失风险,不符合业务数据存储规范。
解决方案

推荐使用Java标准的财务金额类型BigDecimal处理该场景,同时同步调整数据库字段类型,完整修改后的代码如下:

if(jCheckBox1.isSelected())
{
    String bx="Insert into supplierpaymenttable(Supplier_ID,SupplierInvoice_ID,User_ID,InvoiceNo,TotalAmount,PaymentAmount,RemainingBalance) VALUES (?,?,?,?,?,?,?)";
      
    PreparedStatement pay=conn.prepareStatement(bx);
    // 直接将输入的带小数字符串转为BigDecimal,避免精度丢失
    BigDecimal totalAmount = new BigDecimal(jTextField5.getText().trim());
    // 计算剩余余额,保留你原有总金额减总付款的逻辑
    BigDecimal remainingBalance = totalAmount.subtract(totalAmount);
                
    pay.setString(1,String.valueOf(supplier));
    pay.setString(2,String.valueOf(det));
    pay.setString(3,"1");
    pay.setString(4, String.valueOf(invoie));
    // 使用setBigDecimal绑定SQL参数
    pay.setBigDecimal(5, totalAmount);
    pay.setBigDecimal(6, totalAmount);
    pay.setBigDecimal(7, remainingBalance);
    int rsdets= pay.executeUpdate();
}

同时需要将MySQL表supplierpaymenttable中TotalAmount、PaymentAmount、RemainingBalance三个字段的类型从INT调整为DECIMAL(12,2),12为总位数、2为保留小数位,可根据实际业务需求调整数值。

如果你的业务明确不需要小数位,也可以选择先截取字符串的小数部分再转为int,仅作为临时兼容方案使用:

String amountStr = jTextField5.getText().trim();
// 截取小数点前的整数部分
if (amountStr.contains(".")) {
    amountStr = amountStr.split("\\.")[0];
}
int k = Integer.parseInt(amountStr);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:15:04