了解 C# 中的雙精確度比較
問題:
在 C# 中直接比較 double
變數可能會產生意想不到的結果。例如,即使 if (x == 0.1)
被指派值 false
,x
也可能計算為 0.1
。
根本原因:
問題源自於浮點數(如 float
和 double
)在電腦記憶體中的表示方式。它們使用二進制小數表示,與我們習慣的十進制小數表示不同。 這意味著許多十進制值(例如 0.1)無法用二進制精確表示。 由此產生的近似值會引入細微的捨入誤差。
解:
當精確度至關重要時,最有效的解決方案是使用 decimal
資料類型。 decimal
以十進位小數表示,能夠準確儲存 0.1 等值。
更多詳情:
二進制分數,與十進制類似,使用 2 的冪而不是 10 的冪。正如 1/3 (0.3333...) 無法用十進制精確表示一樣,1/10 (0.1) 也缺乏精確的二進位表示。 這種固有的限制會導致舍入誤差,從而導致比較差異。 電腦儲存了 0.1 的近似值,但該近似值並不完全等於比較中使用的文字 0.1。
以上是為什麼在 C# 中比較雙精度值有時會回傳 False?的詳細內容。更多資訊請關注PHP中文網其他相關文章!