Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membandingkan Nilai Berganda dengan Selamat dalam C#?

Bagaimanakah Saya Boleh Membandingkan Nilai Berganda dengan Selamat dalam C#?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-22 21:01:12924semak imbas

How Can I Safely Compare Double Values in C#?

Cara yang boleh dipercayai untuk membandingkan nilai berganda dalam C#

Dalam C#, perbandingan nilai kepersisan dua kali sering membawa kepada hasil yang tidak dijangka disebabkan oleh had yang wujud bagi aritmetik titik terapung. Untuk memahami sebab ini berlaku, mari kita gali sebab kekurangan ketepatan titik terapung.

Ketepatan titik terapung tidak mencukupi

Jenis data apungan dan berganda menyimpan nilai angka dalam format binari. Format ini sememangnya tidak mempunyai ketepatan untuk mewakili nombor tertentu dengan tepat, termasuk nilai perpuluhan mudah seperti 0.1. Apabila double diberikan nilai 0.1, ia sebenarnya menyimpan perwakilan binari yang merupakan anggaran nilai perpuluhan sebenar. Kekurangan ketepatan ini berpunca daripada sifat menukar nombor perpuluhan kepada pecahan binari.

Penyelesaian yang mungkin

Untuk mengendalikan perbandingan nilai berganda dengan cekap, pertimbangkan penyelesaian berikut:

  1. Perbandingan nilai dua kali ganda: Apabila membandingkan nilai dua kali ganda, secara amnya tidak disyorkan untuk menggunakan pengendali kesamaan (==). Sebaliknya, kaedah perbandingan anggaran boleh digunakan untuk mengambil kira kemungkinan ralat pembundaran. Ini biasanya melibatkan penentuan nilai toleransi dan membandingkan sama ada perbezaan antara dua nilai adalah kurang daripada toleransi itu.

  2. Jenis data perpuluhan: Untuk operasi dan perbandingan angka yang tepat, pertimbangkan untuk menggunakan jenis data perpuluhan, yang menyimpan nilai dalam tatatanda perpuluhan. Pendekatan ini memastikan perwakilan tepat nilai perpuluhan seperti 0.1.

Arahan tambahan

Kekurangan ketepatan dalam storan terapung dan berganda adalah disebabkan oleh fakta bahawa perwakilan binari secara semula jadi sesuai dengan nilai angka yang merupakan kuasa 2, seperti 1/2, 1/4, dsb. Walau bagaimanapun, pecahan perpuluhan dengan penyebut tertentu, seperti 0.1 (1/10), tidak boleh diwakili tepat dalam binari tanpa mengalami ralat pembundaran.

Contoh

<code class="language-csharp">double x = 0.1;
double y = 0.1;
double tolerance = 0.000001; // 定义容差

if (Math.Abs(x - y) < tolerance) // 使用容差进行近似比较
{
    // 代码块
}</code>

Contoh ini menunjukkan cara menggunakan Math.Abs() untuk mengira perbezaan mutlak antara dua nilai berganda dan membandingkannya dengan toleransi yang dipratentukan, membolehkan perbandingan nilai berganda yang lebih dipercayai. Memilih nilai toleransi yang sesuai bergantung pada senario aplikasi tertentu dan keperluan ketepatan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membandingkan Nilai Berganda dengan Selamat dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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