2014-08-28 108 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

相關問題