首頁 >後端開發 >C++ >為什麼在 C# 中將浮點表達式轉換為整數會根據方法產生不同的結果?

為什麼在 C# 中將浮點表達式轉換為整數會根據方法產生不同的結果?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-08 17:26:40447瀏覽

Why Does Casting a Float Expression to an Integer in C# Produce Different Results Depending on the Method?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn