Rumah > pembangunan bahagian belakang > C++ > Mengapa Casting Terapung ke Ints dalam C# Menghasilkan Keputusan Berbeza Bergantung pada Kaedah?

Mengapa Casting Terapung ke Ints dalam C# Menghasilkan Keputusan Berbeza Bergantung pada Kaedah?

Susan Sarandon
Lepaskan: 2025-01-08 17:22:40
asal
505 orang telah melayarinya

Why Do Casting Floats to Ints in C# Produce Different Results Depending on the Method?

Perbezaan dalam memaksa nombor titik terapung kepada integer dalam C#: kaedah penukaran mempengaruhi keputusan

Dalam C#, aritmetik titik terapung boleh mempunyai gelagat yang tidak dijangka apabila menghantar hasil kepada integer. Pertimbangkan coretan kod berikut:

int speed1 = (int)(6.2f * 10);
float tmp = 6.2f * 10;
int speed2 = (int)tmp;
Salin selepas log masuk

Secara teorinya, kelajuan1 dan kelajuan2 sepatutnya menghasilkan nilai yang sama, tetapi yang menghairankan, hasilnya berbeza:

<code>speed1 = 61
speed2 = 62</code>
Salin selepas log masuk

Mengapa ini berlaku?

Inti masalah ialah aritmetik titik terapung, yang mungkin menimbulkan ralat pembundaran. Dalam (int)(6.2f 10), nilai 6.2f 10 (kira-kira 61.999998) dipotong kepada integer, menghasilkan 61.

Sebaliknya, dalam int speed2 = (int)tmp, nilai 6.2f * 10 pertama kali dibundarkan kepada nilai titik terapung terdekat, iaitu 62. Nilai bulat ini kemudiannya ditukar kepada integer, menghasilkan 62.

Untuk memastikan gelagat yang boleh diramal, biasanya disyorkan untuk menggunakan Math.Round atau fungsi serupa untuk operasi pembundaran, dan bukannya bergantung pada penukaran tersirat.

Atas ialah kandungan terperinci Mengapa Casting Terapung ke Ints dalam C# Menghasilkan Keputusan Berbeza Bergantung pada Kaedah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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