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

Mengapa `x == 0.1` Tidak Sentiasa Berfungsi dengan Jenis Data `double` C#?

Linda Hamilton
Lepaskan: 2025-01-22 20:46:11
asal
604 orang telah melayarinya

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

C# double Perbandingan: Isu Ketepatan

Bekerja dengan nombor titik terapung (seperti jenis double C#) selalunya memberikan cabaran yang tidak dijangka apabila membandingkan nilai. Contoh biasa ialah membandingkan pembolehubah double kepada 0.1:

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

Perbandingan yang kelihatan mudah ini mungkin gagal secara mengejutkan.

Memahami Masalah: Perwakilan Perduaan lwn Perpuluhan

Punca utama terletak pada cara nombor terapung disimpan. Nilai double disimpan sebagai pecahan binari, bukan pecahan perpuluhan. Ini bermakna bahawa banyak nilai perpuluhan, termasuk 0.1, tidak boleh diwakili dengan tepat sebagai pecahan binari. Sebaliknya, komputer menyimpan anggaran, membawa kepada perbezaan halus yang menjejaskan perbandingan.

Penyelesaian: Menggunakan decimal Jenis Data

Untuk mengelakkan isu ketepatan ini, gunakan decimal jenis data. Nilai decimal disimpan menggunakan tatatanda perpuluhan, membenarkan perwakilan tepat nombor seperti 0.1.

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

Menggunakan decimal memastikan storan dan perbandingan 0.1 yang tepat.

Perwakilan Titik Terapung: Pandangan Lebih Dalam

Untuk menggambarkan masalah, pertimbangkan perwakilan perpuluhan. 12.34 ialah:

<code>1 * 10^1 + 2 * 10^0 + 3 * 10^-1 + 4 * 10^-2</code>
Salin selepas log masuk

Begitu juga, 0.1 ialah:

<code>1 * 10^-1</code>
Salin selepas log masuk

Walau bagaimanapun, dalam perduaan, sesetengah nombor (seperti 1/10, atau 0.1 perpuluhan) tidak mempunyai perwakilan yang tepat. Mereka dianggarkan, yang membawa kepada percanggahan yang menyebabkan hasil yang tidak dijangka dalam perbandingan. Anggaran ini adalah sebab x == 0.1 mungkin gagal apabila x ialah double.

Atas ialah kandungan terperinci Mengapa `x == 0.1` Tidak Sentiasa Berfungsi dengan Jenis Data `double` 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