首頁 >後端開發 >C++ >為什麼 `x == 0.1` 不總是適用於 C# 的 `double` 資料型別?

為什麼 `x == 0.1` 不總是適用於 C# 的 `double` 資料型別?

Linda Hamilton
Linda Hamilton原創
2025-01-22 20:46:11635瀏覽

Why Doesn't `x == 0.1` Always Work with C#'s `double` Data Type?

C# double 比較:精確度問題

使用浮點數(如 C# 的 double 類型)在比較值時通常會帶來意想不到的挑戰。 一個常見的例子是將 double 變數與 0.1 進行比較:

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

這個看似簡單的比較可能會出人意料地失敗。

理解問題:二進位與十進位表示

根本原因在於浮點數的儲存方式。 double 值儲存為二進位分數,而不是十進制分數。這意味著許多十進制值(包括 0.1)無法精確表示為二進制分數。 相反,計算機會儲存近似值,從而導致影響比較的細微差異。

解:使用 decimal 資料型別

要避免此精確度問題,請使用 decimal 資料類型。 decimal 值使用十進位表示法存儲,允許精確表示數字,如 0.1。

<code class="language-csharp">decimal x = 0.1m;
if (x == 0.1m) { /* Code */ }</code>

使用decimal可確保準確儲存和比較0.1。

浮點表示:深入了解

為了說明問題,請考慮十進位表示法。 12.34 是:

<code>1 * 10^1 + 2 * 10^0 + 3 * 10^-1 + 4 * 10^-2</code>

同樣,0.1 是:

<code>1 * 10^-1</code>

但是,在二進位中,某些數字(如 1/10 或十進位的 0.1)缺乏精確的表示。 它們是近似值,導致比較中出現意外結果的差異。 這種近似就是為什麼當 x == 0.1xdouble 可能會失敗的原因。

以上是為什麼 `x == 0.1` 不總是適用於 C# 的 `double` 資料型別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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