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;
Secara teorinya, kelajuan1 dan kelajuan2 sepatutnya menghasilkan nilai yang sama, tetapi yang menghairankan, hasilnya berbeza:
<code>speed1 = 61 speed2 = 62</code>
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!