我有这段代码:
try {
Ciocco_V.tot = Double.parseDouble(Et444Tot.getText().toString());
} catch (NumberFormatException e) {
e.printStackTrace();
}
try {
Ciocco_V.burro = Double.parseDouble(Et111Burro.getText().toString());
} catch (NumberFormatException e) {
e.printStackTrace();
}
try {
Ciocco_V.fibra = Double.parseDouble(Et222Fibra.getText().toString());
} catch (NumberFormatException e) {
e.printStackTrace();
}
在edittex里面有这个号码:
44.2(burro)和40.6(fibra)84.8(tot)if (((Ciocco_V.burro + Ciocco_V.fibra) != Ciocco_V.tot ) {
//fail condition
} else {
// correct
}
如果我检查条件 Ciocco_V.burro + Ciocco_V.fibra 返回此值: 84.80000000000001 而我的失败...... 为什么呢?
答案 0 :(得分:1)
这是因为浮点精度。比较两者是更好的做法:
if (((Ciocco_V.burro + Ciocco_V.fibra) - Ciocco_V.tot) > 0.00000001 ){
//fail condition
}else{
// correct
}
答案 1 :(得分:0)
如果您进行了一些研究,可以通过以下方式来实现:this
以前多次询问过这个问题!
答案 2 :(得分:0)
您可以使用Double.compare(d1, d2)
来比较这两个值:
int retval = Double.compare(Ciocco_V.burro + Ciocco_V.fibra, Ciocco_V.tot);
if (retval != 0) {
}
它返回
如果d1在数值上等于d2,则值为0;如果是小于0的值 d1在数值上小于d2;如果d1是,则值大于0 在数值上大于d2。