2011-08-19 22 views
1

可能重複:
C# float bug? 0.1 - 0.1 = 1.490116E-08
problem in comparing double values in C#0.2 + 0.3 = 0.5 ...問題的浮子式

在我的應用我想測試,如果浮動一=浮動b ,然後做一些操作。但是,我想知道,在浮動類型0.2 + 0.3 == 0.5返回false。

因此,這裏是我的代碼

float a = 0.3f; 
float b = 0.2f; 
float c = 0.5f; 
    if (a + b == c) 
      Console.WriteLine("true"); 
    else 
      Console.WriteLine("false"); 
    Console.WriteLine(a+b); 
    Console.WriteLine(c); 

一些組成部分,這裏是這部分的結果

false 
0.5 
0.5 

我無法弄清楚什麼是錯的... ...我可以使用雙或者小數點代替浮點數,但我想知道這裏有什麼問題。 感謝您的幫助。

+0

http://stackoverflow.com/questions/1398753/problem-in-comparing-doublevalues-in-c – fl00r

+0

這個答案應該可以解決你的問題:http://stackoverflow.com/questions/485175/c - 網絡是它的安全檢查浮點值的平等 - 0/485777#485777 – ChrisA

+0

[什麼每個計算機科學家應該知道的浮點算術](http:// download .oracle.com /文檔/ CD/E19957-01/806-3568/ncg_goldberg.html) –

回答

5

浮點數不是精確值,它們是近似值。可能是等式爲0.30000001 + 0.20000003(= 0.50000004)== 0.50000001,這會導致錯誤。

你應該檢查兩個值之間的差異是否真的很小。 More info here