我用java做了一个小应用程序。我想在mysql database.Now中插入供应商支付,问题是当我尝试用总支付减去总余额并输入balance列时。因此,对于输入字符串:“396.00”java.lang.NumberFormatException:,它给出了类似于的错误。那我怎么解决呢
if(jCheckBox1.isSelected())
{
String bx="Insert into supplierpaymenttable(Supplier_ID,SupplierInvoice_ID,User_ID,InvoiceNo,TotalAmount,PaymentAmount,RemainingBalance) VALUES (?,?,?,?,?,?,?)";
PreparedStatement pay=conn.prepareStatement(bx);
int k=Integer.parseInt(jTextField5.getText());
int cx=k-k;
pay.setString(1,String.valueOf(supplier));
pay.setString(2,String.valueOf(det));
pay.setString(3,"1");
pay.setString(4, String.valueOf(invoie));
pay.setInt(5, Integer.valueOf(jTextField5.getText()));
pay.setInt(6, Integer.valueOf(jTextField5.getText()));
pay.setInt(7,Integer.valueOf(cx));
int rsdets= pay.executeUpdate();
}发布于 2021-11-25 05:59:00
就像延斯提到的。您正在尝试将双/浮点值强制转换为int。所以取决于你想做什么。
如果您接受小数点,那么最好将DB模式更改为接受小数点并使用Double.valueOf(cx).
如果您只接受整数,则必须解析输入并截断或舍入小数点。(int) Math.round(Double.valueOf(cx))
- Some people multiply the amount by 100 to include cents as a way to bypass dealing with doubles编辑:你能张贴堆栈跟踪吗?仔细观察代码,cx已经是一个整数,并且您正在执行什么都不做的Integer.valueOf(cx)。另外,cx不是一直都是0吗,因为您在做k-k?您确定这些ID是字符串值吗?那部分在我看来很奇怪。
发布于 2021-11-25 06:53:18
396.00是一个双值而不是int值。因此,您必须将其解析为双倍:
Double.valueOf(cx).intValue() 因此,您的代码看起来是:
if(jCheckBox1.isSelected())
{
String bx="Insert into supplierpaymenttable(Supplier_ID,SupplierInvoice_ID,User_ID,InvoiceNo,TotalAmount,PaymentAmount,RemainingBalance) VALUES (?,?,?,?,?,?,?)";
PreparedStatement pay=conn.prepareStatement(bx);
int k=Double.valueOf(jTextField5.getText()).intValue();
int cx=k-k;
pay.setString(1,String.valueOf(supplier));
pay.setString(2,String.valueOf(det));
pay.setString(3,"1");
pay.setString(4, String.valueOf(invoie));
pay.setInt(5, Integer.valueOf(jTextField5.getText()));
pay.setInt(6, Integer.valueOf(jTextField5.getText()));
pay.setInt(7,Double.valueOf(cx).intValue());
int rsdets= pay.executeUpdate();
}https://stackoverflow.com/questions/70106215
复制相似问题