Rumah > pembangunan bahagian belakang > C++ > Mengapa `x == 0.1` Tidak Berfungsi dengan `double x = 0.1` dalam C#?

Mengapa `x == 0.1` Tidak Berfungsi dengan `double x = 0.1` dalam C#?

Susan Sarandon
Lepaskan: 2025-01-22 20:51:13
asal
692 orang telah melayarinya

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

Perbandingan Nombor Titik Terapung dalam C#: Dilema Perpuluhan

Dalam C#, anda mungkin menghadapi beberapa masalah apabila membandingkan nilai jenis double. Pertimbangkan kod berikut:

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

Anehnya, kod ini tidak memasukkan pernyataan if. kenapa ni?

Masalah nombor titik terapung

Punca masalah terletak pada cara komputer mewakili nombor titik terapung (khususnya double). Tidak seperti integer, double menggunakan pecahan binari dan bukannya pecahan perpuluhan. Ini bermakna beberapa nilai perpuluhan, seperti 0.1, tidak boleh disimpan dengan tepat.

Sebagai contoh, dalam tatatanda binari, 0.1 diwakili sebagai 0.000110011001100110011001.... Komputer memotong gelung perpuluhan tak terhingga ini kepada perwakilan terhingga, yang mungkin tidak sepadan dengan nilai yang dijangkakan.

Penyelesaian

Untuk menyelesaikan masalah ini, anda boleh mempertimbangkan kaedah berikut:

  • Menggunakan jenis decimal: Jenis decimal menyimpan nombor menggunakan tatatanda perpuluhan, membenarkan perwakilan yang tepat.
  • Perbandingan Epsilon: Gunakan margin ralat kecil (cth. Math.Abs(x - 0.1)) untuk membandingkan nombor titik terapung.

Penjelasan sebab

Pecahan perduaan berbeza daripada pecahan perpuluhan dalam keupayaannya untuk mewakili nombor tertentu. Sebagai contoh, nombor 1/10 tidak boleh diwakili tepat dalam binari, menyebabkan pengembangan binarinya lebih kurang 0.0001100... Proses pembundaran komputer memperkenalkan ketidaktepatan apabila menyimpan nombor titik terapung.

Atas ialah kandungan terperinci Mengapa `x == 0.1` Tidak Berfungsi dengan `double x = 0.1` dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan