Rumah >pembangunan bahagian belakang >C++ >Mengapa Adakah `i = 10 * 0.69;` dalam C# Menghasilkan 6.8999999999999995 Daripada 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:
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
.Math.Round()
atau pemformatan rentetan dengan NumberFormatInfo
membolehkan anda membundarkan hasil ke tahap ketepatan yang diingini.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!