Rumah >pembangunan bahagian belakang >C++ >Mengapa Pembahagian Integer dalam C Menghasilkan Sifar Apabila Disimpan dalam Pembolehubah Berganda?

Mengapa Pembahagian Integer dalam C Menghasilkan Sifar Apabila Disimpan dalam Pembolehubah Berganda?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-03 11:35:10999semak imbas

Why Does Integer Division in C   Result in Zero When Stored in a Double Variable?

Bahagian Integer Menghasilkan Sifar Mengejutkan dalam Pembolehubah Berganda

Dalam cuba mengira pembahagian mudah (3/5), anda mungkin menghadapi keputusan yang tidak dijangka . Walaupun menyimpan hasil dalam pembolehubah berketepatan dua kali, hasilnya mungkin muncul secara tidak menentu sebagai sifar. Untuk membongkar misteri ini, mari kita siasat mekanisme asas:

Dalam coretan kod yang disediakan, kedua-dua dividen (3) dan pembahagi (5) ialah integer. Secara lalai, C mentafsirkan pembahagian ini sebagai pembahagian integer, yang membulatkan ke bawah hasil dan membuang bahagian pecahan. Dalam kes ini, 3 dibahagikan dengan 5 menghasilkan 0, seperti yang dijangkakan dalam pembahagian integer.

Untuk membetulkan isu ini dan mendapatkan pembahagian titik terapung yang dikehendaki, kita perlu memastikan sekurang-kurangnya satu daripada operan diwakili sebagai nombor sebenar. Ini boleh dicapai dengan menambahkan ".0" sama ada pada pembahagi atau dividen:

double f = 3.0 / 5;  // Explicitly making the dividend a real number

// or

double f = 3 / 5.0;  // Explicitly making the divisor a real number

Dengan menukar salah satu operan kepada nombor nyata, kami memaksa pengkompil untuk melaksanakan pembahagian titik terapung. Ini memastikan bahawa bahagian pecahan dikekalkan dan hasil yang betul (0.6 dalam kes ini) disimpan dalam pembolehubah f.

Atas ialah kandungan terperinci Mengapa Pembahagian Integer dalam C Menghasilkan Sifar Apabila Disimpan dalam Pembolehubah Berganda?. 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