给定double时十进制数的数字格式例外

时间:2018-05-21 15:06:18

标签: java numberformatexception

当我运行以下脚本来检查inputQty大于AvailQty时,我收到以下内容:

  

java.lang.NumberFormatException:对于输入字符串:“97,045.1193”

如果availableQty是十进制数,则会发生此错误。该值是从数据库传递的,请您纠正我错在哪里?

   double AvailQty = Double.valueOf(AQTY.getValue());
   double inputQty = Double.valueOf(QTY.getValue());
   if(inputQty > AvailQty){
    session.setStatusMessage("Not Enough Quantity");
    //Abort operation
    throw new AbortHandlerException();
  }

由于

4 个答案:

答案 0 :(得分:1)

它无法格式化,因为它不接受逗号。您可以执行Double.valueOf(INV.AVAILQTY.getValue().replaceAll(",", ""))Double.valueOf(XX_IGL_QTY.getValue().replaceAll(",", ""))之类的操作,以便在解析之前删除任何逗号。

答案 1 :(得分:1)

你的字符串包含逗号,在解析之前删除任何逗号。

Double.valueOf(INV.AVAILQTY.getValue().replaceAll(",", ""));

答案 2 :(得分:0)

简单,您的字符串包含逗号。这不合法。你只能拥有数字和点(小数点分隔符)。 我不知道你从哪里获得价值,但如果不是你可以改变的那些东西,你将不得不做一些黑客攻击;)

Double.valueOf(INV.AVAILQTY.getValue().replaceAll(",","");

答案 3 :(得分:0)

您可以告诉格式化程序使用您喜欢的任何格式读取数字,而不是重新格式化字符串以进行转换。

This answer显示了如何更改格式。

这是一个示例测试,用于说明如何成功解析问题中的相同数字:

 @Test
public void showNumberFormats() throws ParseException {
    String rawAvailQty = "97,045.1193";
    String rawInptQty = "98,045.3421";

    NumberFormat nf = NumberFormat.getNumberInstance();

    double AvailQty = nf.parse(rawAvailQty).doubleValue();
    double inputQty = nf.parse(rawInptQty).doubleValue();
    if(inputQty > AvailQty){
     //Abort operation
     System.err.println("Could not perform operation");
   }
    System.out.println("Available qty: " + AvailQty);
    System.out.println("Input qty: " + inputQty);
}

打印:

Could not perform operation
Available qty: 97045.1193
Input qty: 98045.3421
相关问题