Keputusan Sifar Tidak Dijangka daripada Bahagian Integer
Semasa projek pengaturcaraan baru-baru ini, kod berikut menghasilkan hasil yang tidak dijangka:
<code>PRINT @set1 PRINT @set2 SET @weight= @set1 / @set2; PRINT @weight</code>
Bahagian tersebut menghasilkan 0 dan bukannya 0.073667712 yang dijangkakan.
Punca Punca: Jenis Data Integer
Masalahnya berpunca daripada jenis data @set1
dan @set2
. Kedua-duanya adalah integer, mampu menyimpan nombor bulat sahaja. Pembahagian integer sentiasa memotong bahagian perpuluhan, menghasilkan keputusan nombor bulat. Oleh itu, 47 dibahagikan dengan 638 menghasilkan 0.
Penyelesaian
Untuk mendapatkan hasil perpuluhan yang betul, dua pendekatan tersedia:
Takrifkan Pembolehubah sebagai Terapung: Isytiharkan @set1
dan @set2
sebagai nombor titik terapung (terapung). Ini membolehkan pembolehubah menyimpan nilai perpuluhan, memastikan pembahagian perpuluhan yang tepat.
Jenis Casting Semasa Pengiraan: Jika mengubah jenis data pembolehubah tidak dapat dilaksanakan, gunakan operator CAST
untuk menukar integer kepada terapung sementara semasa pembahagian:
<code>SET @weight= CAST(@set1 AS float) / CAST(@set2 AS float);</code>
Mana-mana kaedah menjamin operasi bahagi mengembalikan nilai perpuluhan yang dijangka, menyelesaikan isu hasil sifar yang tidak dijangka.
Atas ialah kandungan terperinci Mengapa Bahagian Integer Menghasilkan Sifar Daripada Nilai Perpuluhan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!