Mengapa 8%-3 dalam PHP bersamaan dengan 0?
Dalam PHP, untuk beberapa operasi matematik mudah, kami sentiasa berharap untuk mendapatkan hasil yang betul. Walau bagaimanapun, kadangkala hasil daripada beberapa operasi mudah mengelirukan kami. Sama seperti dalam PHP, hasil pengiraan 8%-3 ialah 0. Mengapa ini berlaku?
Untuk memahami masalah ini, anda mesti terlebih dahulu memahami definisi operasi modulo. Dalam matematik, operasi modulo adalah untuk mencari baki, biasanya dinyatakan sebagai "a mod n", di mana a ialah dividen dan n ialah pembahagi. Hasil daripada operasi modulo ialah integer bukan negatif antara 0 hingga n-1. Sebagai contoh, keputusan 9 mod 4 ialah 1 kerana 9 dibahagikan dengan 4 sama dengan 2 baki 1.
Dalam PHP, operasi modulo diwakili oleh simbol %. Menurut manual PHP, tanda hasil operasi modulo adalah sama dengan dividen. Iaitu, jika dividen positif, hasilnya juga positif;
Berbalik kepada soalan kami, 8 dibahagikan dengan 3 sama dengan 2 baki 2. Mengikut definisi operasi modulo, hasilnya hendaklah 2. Tetapi dalam PHP, keputusan 8%-3 ialah 0. Adakah ini melanggar definisi operasi modulo?
Sebenarnya, fenomena ini bukan unik untuk PHP, tetapi satu cara untuk menentukan operasi modulo. Dalam sesetengah bahasa pengaturcaraan, hasil operasi modulo boleh menjadi negatif. Definisi khusus akan berbeza-beza mengikut spesifikasi bahasa pengaturcaraan. Dalam PHP, peraturan "pusingan ke arah sifar" aritmetik modulo digunakan.
Mengikut manual PHP, apabila dividen adalah nombor positif, hasil operasi modulo adalah sama dengan baki dividen dan pembahagi apabila dividen adalah nombor negatif, hasil operasi modulo adalah sama kepada dividen dibahagikan dengan hasil bulat pembahagi dan 0 Baki yang lebih besar. Dengan kata lain, hasil operasi modulo PHP sentiasa lebih kecil daripada nilai mutlak dividen, tetapi tandanya sama dengan dividen.
Jadi, kembali kepada contoh 8%-3. 8 ialah nombor positif dan -3 ialah nombor negatif. Menurut peraturan "pusingan ke arah sifar", hasil operasi modulo hendaklah baki 8 yang lebih besar dibahagikan dengan -3 dan 0. Hasil pembahagian 8 dengan -3 dan pembundaran ialah -3, dan yang lebih besar berbanding 0 masih 0.
Oleh itu, keputusan 8%-3 adalah bersamaan dengan 0.
Cara takrifan ini boleh memudahkan logik kod dalam sesetengah senario, tetapi ia juga boleh disalahertikan dengan mudah. Jika kita ingin mendapatkan baki nombor positif, kita boleh menggunakan fungsi fmod() yang disediakan oleh PHP, yang mengembalikan baki pembahagian nombor titik terapung.
Untuk meringkaskan, 8%-3 bersamaan dengan 0 dalam PHP ditentukan oleh cara operasi modulo ditakrifkan, iaitu, peraturan "pembundaran ke arah sifar". Untuk memahami fenomena ini, kita perlu memahami spesifikasi operasi modulo bahasa pengaturcaraan yang kita gunakan, dan memilih kaedah operasi yang sesuai mengikut situasi sebenar.
Atas ialah kandungan terperinci Mengapakah 8%-3 dalam PHP sama dengan 0?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!