当我运行以下脚本来检查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();
}
由于
答案 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