Rumah > pembangunan bahagian belakang > C++ > Mengapa Menghantar Ungkapan Terapung ke Integer dalam C# Menghasilkan Keputusan Berbeza Bergantung pada Kaedah?

Mengapa Menghantar Ungkapan Terapung ke Integer dalam C# Menghasilkan Keputusan Berbeza Bergantung pada Kaedah?

Mary-Kate Olsen
Lepaskan: 2025-01-08 17:26:40
asal
444 orang telah melayarinya

Why Does Casting a Float Expression to an Integer in C# Produce Different Results Depending on the Method?

Gelagat luar biasa C# terapung kepada penukaran integer

Coretan kod berikut menunjukkan kelakuan tidak dijangka penukaran titik terapung kepada integer dalam C#:

<code class="language-csharp">int speed1 = (int)(6.2f * 10);
float tmp = 6.2f * 10;
int speed2 = (int)tmp;</code>
Salin selepas log masuk

Anehnya, speed1 mempunyai nilai 61, manakala speed2 mempunyai nilai 62, walaupun kedua-duanya menjangkakan hasilnya ialah 62. Pemeriksaan rapi mendedahkan bahawa dalam speed1 ungkapan titik terapung 6.2f * 10 secara tersirat ditukar kepada menaip double sebelum dipotong kepada integer, menghasilkan keputusan 61.

Walau bagaimanapun, dalam speed2, hasil 6.2f * 10 secara eksplisit diberikan kepada pembolehubah float tmp. Langkah perantaraan ini melibatkan pembulatan nilai kepada nilai float yang terdekat, iaitu 62, dan kemudian menukarnya kepada integer.

Perbezaan utama antara kedua-dua operasi ialah perwakilan pertengahan. Dalam kes pertama, pengkompil mungkin memilih untuk menempah perwakilan ketepatan yang lebih tinggi untuk ungkapan titik terapung, menyebabkan pemotongan dan menghasilkan nilai 61. Walau bagaimanapun, dalam kes kedua, tugasan float eksplisit memaksa pembundaran, menghasilkan nilai 62.

Dalam tindakan berikut:

<code class="language-csharp">double d = 6.2f * 10;
int tmp2 = (int)d;</code>
Salin selepas log masuk

d akan menjadi jenis double, menyebabkan double ditukar dan nilai yang dibulatkan dipenggal kepada integer, yang biasanya menghasilkan nilai 62.

Tingkah laku yang tidak dijangka dalam penukaran ungkapan titik terapung ialah aspek halus pengendalian titik terapung C#. Memahami nuansa ini adalah penting untuk mengelakkan hasil yang tidak dijangka dan memastikan penukaran yang tepat antara jenis angka.

Atas ialah kandungan terperinci Mengapa Menghantar Ungkapan Terapung ke Integer dalam C# Menghasilkan Keputusan Berbeza Bergantung pada Kaedah?. 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