【发布时间】:2014-05-23 15:01:17
【问题描述】:
我使用Choco 约束求解器来解决问题。
我使用RealVariables x、y 和z。
解决方案是这样的
x[3.9999999999999996, 4.000000000000001]
y[-3.1434555694057773E-162, 3.1434555694057773E-162]
z[-3.1434555694057773E-162, 3.1434555694057773E-162]
我尝试将解决方案解析为双变量。
这是我的代码:
String X = s.getVar(x).toString();
String Y = s.getVar(y).toString();
String Z = s.getVar(z).toString();
Matcher match = Pattern.compile("-?\\d+(\\.\\d+)?").matcher(X);
while(match.find())
{
double d = Double.parseDouble(match.group());
System.out.println("value= " + d);
}
match = Pattern.compile("-?\\d+(\\.\\d+)?").matcher(Y);
while(match.find())
{
DecimalFormat format = new DecimalFormat("0.00");
Double d = Double.parseDouble(match.group());
System.out.println("value= " + format.format(d));
}
match = Pattern.compile("-?\\d+(\\.\\d+)?").matcher(Z);
while(match.find())
{
double d = Double.parseDouble(match.group());
System.out.println("parsed: " + d);
}
输出是:
parsed: 3.9999999999999996
parsed: 4.000000000000001
parsed: -3,14
parsed: -162,00
parsed: 3,14
parsed: -162,00
parsed: -3.143455569405777
parsed: -162.0
parsed: 3.143455569405777
parsed: -162.0
这意味着,-162 被解析为另一个双精度。我该如何防止这种情况?如何使用科学计数法将String 解析为Double?
这是因为E-162 对于Double 来说太长了吗?
【问题讨论】:
-
E与您的正则表达式不匹配,因此它会在y和z上找到 4 个匹配项。您需要考虑到该号码可能有一个E。