Rumah > pembangunan bahagian belakang > C++ > Mengapa Membandingkan Nilai Berganda dalam C# Kadangkala Mengembalikan Palsu?

Mengapa Membandingkan Nilai Berganda dalam C# Kadangkala Mengembalikan Palsu?

Susan Sarandon
Lepaskan: 2025-01-22 20:50:12
asal
900 orang telah melayarinya

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

Memahami Perbandingan Ketepatan Berganda dalam C#

Masalah:

Perbandingan langsung double pembolehubah dalam C# boleh menghasilkan hasil yang tidak dijangka. Contohnya, if (x == 0.1) mungkin menilai kepada false walaupun apabila x diberikan nilai 0.1.

Punca Punca:

Isu ini berpunca daripada cara nombor titik terapung (seperti float dan double) diwakili dalam ingatan komputer. Mereka menggunakan perwakilan pecahan binari, tidak seperti perwakilan pecahan perpuluhan yang biasa kita lakukan. Ini bermakna bahawa banyak nilai perpuluhan, seperti 0.1, tidak boleh diwakili dengan tepat dalam binari. Anggaran yang terhasil memperkenalkan ralat pembundaran yang halus.

Penyelesaian:

Penyelesaian yang paling berkesan ialah menggunakan decimal jenis data apabila ketepatan adalah diutamakan. decimal menggunakan perwakilan pecahan perpuluhan, mampu menyimpan nilai dengan tepat seperti 0.1.

Butiran Lanjut:

Pecahan perduaan, serupa dengan pecahan perpuluhan, menggunakan kuasa 2 dan bukannya kuasa 10. Sama seperti 1/3 (0.3333...) tidak boleh diwakili dengan tepat dalam perpuluhan, 1/10 (0.1) tidak mempunyai perwakilan binari yang tepat . Had yang wujud ini membawa kepada ralat pembundaran yang menyebabkan percanggahan perbandingan. Komputer menyimpan anggaran hampir 0.1, tetapi anggaran ini tidak betul-betul sama dengan 0.1 literal yang digunakan dalam perbandingan.

Atas ialah kandungan terperinci Mengapa Membandingkan Nilai Berganda dalam C# Kadangkala Mengembalikan Palsu?. 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