我注意到一些奇怪的行爲,同時添加兩個雙打,有時它工作正確,有時不是!C#爲一個簡單的數學運算獲得奇怪的結果
這是第一個例子:
double num1 = 0.1 + 0.7; //Guess the result?
容易 - 0.8!或不?
看看奇怪的結果:
你猜怎麼着,if語句的else塊裏面去,並打印num1
- 不,它不打印0.799999999999993,它打印0.8。
所以我一直向前走了一步,並試圖將此代碼:
if (0.1 + 0.7 == 0.8) //Returns false ??
{
Console.WriteLine("Correct");
}
OK,奇怪的,但現在我找到了正確的方法,就應該使用F(浮動)。正如我記得double有很多空格,所以它可以包含更多的數字,也許這是原因。
float num2 = 0.1f + 0.7f;
if (num2 == 0.8f) //Perfect - finally works !!!
{
Console.WriteLine("Correct");
}
else
{
Console.WriteLine(num2);
}
但是現在,我試試這個 - 並且它又返回false,爲什麼?
if (0.1f + 0.7f == 0.8f) //Returns false :(
{
Console.WriteLine("Correct");
}
手錶結果調試它的時候:
誰能給我解釋一下什麼是錯在這裏?那些錯誤?
在此先感謝。
的可能重複(http://stackoverflow.com/questions/753948/why-is-floating-point-arithmetic-in-c-sharp-imprecise) – MichaC
@MichaC提問的方式完全不同,也不一樣。 –
因爲你在這個問題上付出了很多努力,但最終它是一回事。這僅僅是因爲C#中的浮點運算不精確。在這個網站上已經回答了1000次^^ – MichaC