首頁 >後端開發 >C++ >為什麼在 C# 中 `x == 0.1` 不能與 `double x = 0.1` 一起使用?

為什麼在 C# 中 `x == 0.1` 不能與 `double x = 0.1` 一起使用?

Susan Sarandon
Susan Sarandon原創
2025-01-22 20:51:13640瀏覽

Why Doesn't `x == 0.1` Work with `double x = 0.1` in C#?

C#中的浮點數比較:十進制難題

在C#中,比較double類型的值可能會遇到一些問題。考慮以下程式碼:

<code class="language-csharp">double x = 0.1;
if (x == 0.1)
{
    // ...
}</code>

令人驚訝的是,這段程式碼不會進入if語句。這是為什麼呢?

浮點數問題

問題的根源在於電腦表示浮點數(特別是double)的方式。與整數不同,double使用二進制分數而不是十進制分數。這意味著某些十進制值,例如0.1,無法精確儲存。

例如,在二進位表示法中,0.1表示為0.000110011001100110011001.... 計算機將這個無限循環的小數截斷為有限的表示形式,這可能與預期值不完全匹配。

為了解決這個問題,可以考慮以下幾種方法:

  • 使用decimal類型: decimal型別使用十進位表示法儲存數字,允許精確表示。
  • Epsilon比較: 使用一個小的誤差範圍(例如Math.Abs(x - 0.1))來比較浮點數。

原因解釋

二進制分數與十進制分數在表示某些數字的能力上有所不同。例如,數字1/10無法用二進位精確表示,導致其二進位展開式為近似值0.0001100... 電腦的捨入過程在儲存浮點數時引入了不精確性。

以上是為什麼在 C# 中 `x == 0.1` 不能與 `double x = 0.1` 一起使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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