Pengaturcaraan selalunya melibatkan operasi matematik, dan pembahagian tidak terkecuali. Hasil yang tidak dijangka, bagaimanapun, boleh menjadi masalah. Artikel ini memfokuskan pada isu biasa: operasi pembahagian mengembalikan sifar apabila keputusan bukan sifar dijangka.
Pertimbangkan senario di mana matlamatnya adalah untuk membahagikan nilai integer yang disimpan dalam pembolehubah @set1
dan @set2
, menyimpan hasil dalam @weight
. Kod secara tidak dijangka menghasilkan 0.
Punca utama terletak pada sifat pembolehubah: kedua-dua @set1
dan @set2
ialah integer. Ini menunjukkan kepada konsep kritikal pembahagian integer.
Pembahagian integer, tidak seperti pembahagian titik terapung, melakukan pembahagian pada dua integer dan hanya mengembalikan hasil bagi nombor bulat. Sebarang baki pecahan dipotong (dibuang).
Jika @set1
ialah 47 dan @set2
ialah 638, pembahagian integer menghasilkan 47 ÷ 638 = 0. Ini menerangkan keluaran sifar.
Untuk menyelesaikan masalah ini dan mendapatkan hasil perpuluhan yang betul (kira-kira 0.073667712), tukarkan @set1
dan @set2
kepada nombor titik terapung (terapung) secara eksplisit sebelum pembahagian. Terapung boleh mengendalikan bahagian pecahan.
Penyelesaian melibatkan pelarasan kod mudah ini:
<code class="language-sql">SET @weight = CAST(@set1 AS FLOAT) / CAST(@set2 AS FLOAT);</code>
Ringkasnya, memahami tingkah laku pembahagian integer adalah kunci kepada pengaturcaraan yang tepat. Menukar integer kepada terapung memastikan pengiraan yang tepat dan mengelakkan hasil sifar yang salah.
Atas ialah kandungan terperinci Mengapa Pengiraan Bahagian Saya Mengembalikan Sifar Daripada Nilai Perpuluhan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!