2010-03-31 63 views
1

我試圖劃分(float)200/(float)500,但結果爲0.0。爲什麼這樣,我們怎麼能有0.4的結果呢?非常感謝。爲什麼浮動除以較大的浮點數爲零,以及如何避免這種情況在C#中?

+0

那麼,在我的機器上'200f/500f == 0.4f'。你如何顯示計算結果?你不會將它保存到'int'類型的變量中嗎? – 2010-03-31 08:03:26

+0

可能是您的代碼以某種方式執行打字或轉換錯誤。你可以發佈你的代碼給我們檢查明顯的錯誤嗎? – 2010-03-31 08:05:32

+0

我知道這是不可能的,但它只是做到了。我試圖再次運行該程序,它工作正常。我很抱歉浪費你的時間。非常感謝。 – Jronny 2010-03-31 08:13:30

回答

2

這是不可能的。我可以考慮以下情況:

  1. 您正在將結果強制轉換爲整數;在這種情況下,它被取整爲0
  2. 200和500不是真的漂浮物,而是整數;結果將默認爲整數
  3. 您打印浮點數的方式將其轉換爲整數或不顯示小數值。
2

這裏沒什麼錯 - 我和安德烈亞斯在一起。

Console.WriteLine((float)200/(float)500); 

    Console.WriteLine("Press any key to continue"); 
    Console.ReadKey(true); 

結果:

0.4

按任意鍵繼續

3

這是一個非常常見的錯誤,每個程序員都使得它至少一次。有兩個類的除法運算符,它們都使用相同的符號,積分和浮點數。編譯器根據操作數的類型選擇使用哪個。如果均爲,則左側和右側的操作數是不可分割的,那麼您將得到一個整數除法。機器代碼中的idiv指令。它截斷爲零併產生一個整數結果。

只要至少一個操作數是浮點數,您將在機器代碼中獲得fdiv指令並查找結果。簡單地轉換成(浮動)或(雙)就足夠了,就像你在你的問題中所做的一樣。你只需要施放其中一個。或者使用像200f或200.0這樣的浮點文字

0

我在使用Unity3D項目的MonoDevelop調試器中遇到過這個問題。以某種方式評估窗口顯示1.0f/10.0f = 0長。這只是MonoDevelop IDE的一個bug。

相關問題