为什么EditText的Double.parseDouble的总和会返回一个不同的值?

时间:2014-08-28 18:43:44

标签: 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 (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 而我的失败...... 为什么呢?

3 个答案:

答案 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。