2014-08-28 64 views
0

我有这样的代码:为什么EditText的Double.parseDouble总和返回一个不同的值?

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(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 和我的IF失败.... 为什么?

回答

1

这是因为浮点精度。这是更好的做法是比较两个像这样:

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

    //fail condition 
}else{ 
    // correct 
} 
+0

这实在是太多了approsimative在此contidion((Ciocco_V.burro + Ciocco_V.fibra) - Ciocco_V.tot)> 0.00000001)的返回值是: 1.4210854715202004E-14, 我如果条件一样修改这个: if((Math.abs((Ciocco_V.burro + Ciocco_V.fibra) - Ciocco_V.tot)> 0.00000001) 并且这个工作很好 – 2014-08-29 00:01:08

+0

是啊我的答案没有测试。很高兴帮助 – rhodysurf 2014-08-29 00:03:01

0

如果你做了一些研究,你可以来此:this

这个问题之前问了很多次!

0

可以使用Double.compare(d1, d2)到两个值进行比较:

int retval = Double.compare(Ciocco_V.burro + Ciocco_V.fibra, Ciocco_V.tot); 
if (retval != 0) { 

} 

它返回

值0,如果D1在数值上等于D2;如果 d1在数字上小于d2,则该值小于0;并且如果d1是数字上大于d2的 ,则该值大于0。

+0

这个失败与我的IF相同 – 2014-08-28 23:42:58

+0

可能是因为这两个值的总和给你总数,你正在检查!=当你应该检查== – Blackbelt 2014-08-29 05:32:12

相关问题