2010-10-12 53 views

回答

5

浮點數的精度有限。 0.7最有可能無法準確表示,因此a中的值可能爲0.6999999999982左右。相比之下,雙倍0.7(更準確地說:0.6999999999999999999999999384)將表明它更少。

檢查了這一點:http://docs.sun.com/source/806-3568/ncg_goldberg.html

1

由於0.7不能完全表示爲浮點數或雙精度值。當你將它存儲在一個浮點數中時,它會比它以double(默認值)表示時向下舍入一點點。

4

因爲字面0.7是double類型的,而不是浮動。的實際值是0.699999 ...修復:

if (a < 0.7f) 
+0

a的實際值是0.699999 ...假設可以是0.699999 ... :) – 2010-10-12 15:59:54

3

其他的答案暗示,但是,這個問題是由於你不加入一個「F」你的號碼引起的。

任何帶小數點的數字都會被編譯器隱式解釋爲double(即64位值的精度是float的兩倍)。在你的第一行中,你將一個double賦值給一個float,從而失去了精度(如果你打開了警告,你應該有警告,你會得到一個編譯器警告)。

在第二行中,您將float與double進行比較。浮動將被提升爲雙倍(如果我錯了,就糾正我),所以你有0.7的不精確版本,而更精確的0.7。

解決方案:用浮漂打交道時,即

float a = 0.7f; 
if (a < 0.7f);