十进制数在给定双精度时的数字格式例外



当我运行以下脚本来检查大于AvailQtyinputQty时,我得到以下结果:

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();
}

谢谢

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

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

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

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

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

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

此答案显示了如何更改格式。

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

@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

最新更新