Rumah >pembangunan bahagian belakang >C++ >Mengapa Adakah `i = 10 * 0.69;` dalam C# Menghasilkan 6.8999999999999995 Daripada 6.9?

Mengapa Adakah `i = 10 * 0.69;` dalam C# Menghasilkan 6.8999999999999995 Daripada 6.9?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-10 08:57:41177semak imbas

Why Does `i = 10 * 0.69;` in C# Result in 6.8999999999999995 Instead of 6.9?

.Isu Aritmetik dan Ketepatan Titik Terapung BERSIH

Dalam C#, pernyataan i = 10 * 0.69; secara mengejutkan menghasilkan 6.8999999999999995 dan bukannya 6.9 yang dijangkakan. Ini berpunca daripada had yang wujud bagi perwakilan nombor titik terapung dan aritmetik dalam rangka kerja .NET.

Salah tanggapan ialah nilai perpuluhan seperti 0.69 boleh diwakili dengan sempurna dalam binari. Walau bagaimanapun, nombor titik terapung (seperti double dan float) menggunakan sistem perduaan dan banyak pecahan perpuluhan tidak boleh diwakili dengan tepat dalam perduaan sama seperti 1/3 tidak boleh diwakili dengan tepat dengan nombor terhingga digit perpuluhan. Pengkompil mengira dan menyimpan hasil sebagai pemalar semasa penyusunan, tetapi nilai yang disimpan ini adalah anggaran hasil matematik sebenar.

Beberapa penyelesaian wujud untuk menangani isu ketepatan ini:

  • Gunakan decimal jenis data: decimal menawarkan ketepatan yang lebih tinggi dan boleh mewakili 6.9 dengan tepat. Walau bagaimanapun, menggunakan decimal mungkin menyebabkan prestasi berkurangan sedikit berbanding double atau float.
  • Laksanakan pembundaran: Fungsi seperti Math.Round() atau pemformatan rentetan dengan NumberFormatInfo membolehkan anda membundarkan hasil ke tahap ketepatan yang diingini.
  • Pelarasan nilai: Anda boleh melaraskan sedikit nilai input untuk mengimbangi kemungkinan ralat pembundaran. Pendekatan ini, bagaimanapun, menambahkan kerumitan dan mungkin memperkenalkan ketidaktepatan baharu.

Memahami had aritmetik titik terapung adalah penting untuk menulis kod berangka yang mantap dan tepat. Dengan menggunakan teknik yang sesuai, pembangun boleh meminimumkan kesan had ketepatan ini dan memastikan operasi matematik yang boleh dipercayai.

Atas ialah kandungan terperinci Mengapa Adakah `i = 10 * 0.69;` dalam C# Menghasilkan 6.8999999999999995 Daripada 6.9?. 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