当我运行以下脚本来检查大于AvailQty
inputQty
时,我得到以下结果:
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