首頁 > 後端開發 > C++ > 為什麼在 C# 中比較雙精度值有時會回傳 False?

為什麼在 C# 中比較雙精度值有時會回傳 False?

Susan Sarandon
發布: 2025-01-22 20:50:12
原創
900 人瀏覽過

Why Does Comparing Double Values in C# Sometimes Return False?

了解 C# 中的雙精確度比較

問題:

在 C# 中直接比較 double 變數可能會產生意想不到的結果。例如,即使 if (x == 0.1) 被指派值 falsex 也可能計算為 0.1

根本原因:

問題源自於浮點數(如 floatdouble)在電腦記憶體中的表示方式。它們使用二進制小數表示,與我們習慣的十進制小數表示不同。 這意味著許多十進制值(例如 0.1)無法用二進制精確表示。 由此產生的近似值會引入細微的捨入誤差。

解:

當精確度至關重要時,最有效的解決方案是使用 decimal 資料類型。 decimal 以十進位小數表示,能夠準確儲存 0.1 等值。

更多詳情:

二進制分數,與十進制類似,使用 2 的冪而不是 10 的冪。正如 1/3 (0.3333...) 無法用十進制精確表示一樣,1/10 (0.1) 也缺乏精確的二進位表示。 這種固有的限制會導致舍入誤差,從而導致比較差異。 電腦儲存了 0.1 的近似值,但該近似值並不完全等於比較中使用的文字 0.1。

以上是為什麼在 C# 中比較雙精度值有時會回傳 False?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板