Android 为什么EditText的Double.parseDouble和返回的值略有不同?

Android 为什么EditText的Double.parseDouble和返回的值略有不同?,android,Android,我有以下代码: try { Ciocco_V.tot = Double.parseDouble(Et444Tot.getText().toString()); } catch (NumberFormatException e) { e.printStackTrace(); } try { Ciocco_V.burro = Double.parseDouble(Et111Burro.getText().toString()); } catch (NumberFormat

我有以下代码:

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(毛驴)和40.6(纤维)84.8(tot)

如果我检查条件Ciocco_V.burro+Ciocco_V.fibra返回此值: 84.80000000000001 如果我失败了。。。。
为什么?

这是因为浮点精度。比较这两种方法更好:

if (((Ciocco_V.burro + Ciocco_V.fibra) - Ciocco_V.tot) > 0.00000001 ){

    //fail condition
}else{
   // correct
}

如果你做一点调查,你会发现:


这个问题以前被问过很多次

您可以使用
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


这与我的If失败相同,可能是因为这两个值的总和为您提供了总数,您正在检查!=当您应该检查==这在这个contidion((Ciocco_V.burro+Ciocco_V.fibra)-Ciocco_V.tot)>0.00000001)中太过合适时,返回值是:1.42108547152002004e-14,我修改了if条件如下:if((Math.abs((Ciocco_V.burro+Ciocco_V.fibra)-Ciocco_V.tot)>0.00000001)这很有效。是的,我的答案没有经过测试。很高兴它有帮助
 int retval = Double.compare(Ciocco_V.burro + Ciocco_V.fibra, Ciocco_V.tot);
 if (retval != 0) {

 }