C# 浮點數到整數轉換的異常行為
以下程式碼片段展示了 C# 中浮點數到整數轉換的非預期行為:
<code class="language-csharp">int speed1 = (int)(6.2f * 10); float tmp = 6.2f * 10; int speed2 = (int)tmp;</code>
令人驚訝的是,speed1
的值為 61,而 speed2
的值為 62,儘管兩者都預期結果為 62。仔細檢查後發現,在 speed1
中,浮點表達式 6.2f * 10
在截斷為整數之前隱式轉換為 double
類型,導致結果為 61。
然而,在 speed2
中,6.2f * 10
的結果明確賦值給 float
變數 tmp
。此中間步驟涉及將值四捨五入到最接近的 float
值,即 62,然後轉換為整數。
兩種操作之間的關鍵差異在於中間表示。在第一種情況下,編譯器可能會選擇為浮點表達式保留更高的精度表示,從而導致截斷並產生 61 的值。然而,在第二種情況下,明確 float
賦值強制進行四捨五入,導致值為 62。
在以下操作:
<code class="language-csharp">double d = 6.2f * 10; int tmp2 = (int)d;</code>
d
將為 double
類型,導致 double
轉換並將四捨五入的值截斷為整數,這通常會導致值為 62。
浮點表達式轉換中的意外行為是 C# 浮點處理的一個微妙方面。理解這種細微差別對於避免意外結果並確保數值類型之間準確轉換至關重要。
以上是為什麼在 C# 中將浮點表達式轉換為整數會根據方法產生不同的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!