首頁 >後端開發 >C++ >為什麼 C# 中的 `i = 10 * 0.69;` 結果是 6.8999999999999995 而不是 6.9?

為什麼 C# 中的 `i = 10 * 0.69;` 結果是 6.8999999999999995 而不是 6.9?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-10 08:57:41152瀏覽

Why Does `i = 10 * 0.69;` in C# Result in 6.8999999999999995 Instead of 6.9?

.NET 浮點運算與精確度問題

在 C# 中,語句 i = 10 * 0.69; 令人驚訝地產生 6.8999999999999995,而不是預期的 6.9。這源自於 .NET 框架內浮點數表示和算術的固有限制。

誤解是像 0.69 這樣的十進位值可以完美地用二進位表示。 然而,浮點數(如doublefloat)使用二進制系統,許多十進制小數無法用二進制精確表示,就像1/3無法用有限數量的十進制數字精確表示一樣。編譯器在編譯期間計算結果並將其儲存為常數,但這個儲存的值是真實數學結果的近似值。

有幾個解可以解決這個精確度問題:

  • 採用decimal資料型態: decimal提供更高的精確度,可以準確地表示6.9。 但是,與 decimaldouble 相比,使用 float 可能會導致效能略有下降。
  • 實現舍入: Math.Round() 等函數或使用 NumberFormatInfo 進行字串格式化可讓您將結果舍入到所需的精確度等級。
  • 值調整:您可以稍微調整輸入值以補償潛在的捨入誤差。然而,這種方法增加了複雜性,並可能引入新的不準確性。

了解浮點運算的限制對於編寫健全且準確的數字程式碼至關重要。透過利用適當的技術,開發人員可以最大限度地減少這些精度限制的影響並確保可靠的數學運算。

以上是為什麼 C# 中的 `i = 10 * 0.69;` 結果是 6.8999999999999995 而不是 6.9?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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