Rumah > pembangunan bahagian belakang > masalah PHP > Bagaimana untuk mengelakkan ketidaktepatan dalam pendaraban PHP

Bagaimana untuk mengelakkan ketidaktepatan dalam pendaraban PHP

PHPz
Lepaskan: 2023-03-27 18:57:03
asal
979 orang telah melayarinya

PHP ialah bahasa sumber terbuka yang digunakan secara meluas dalam pengaturcaraan sebelah pelayan Fungsinya yang berkuasa dan ciri percuma telah menjadikannya alat penting dalam pembangunan tapak web. Walau bagaimanapun, walaupun prestasi dan kebolehpercayaannya yang cemerlang, PHP juga mempunyai beberapa kelemahan. Antaranya, masalah ketidaktepatan pendaraban adalah masalah yang mudah diabaikan, tetapi ia mungkin membawa masalah besar kepada proses pembangunan.

Dalam PHP, pendaraban ialah operator yang kerap digunakan, yang boleh digunakan untuk mengira hasil darab mana-mana dua nombor. Walau bagaimanapun, dalam PHP, ketidaktepatan pendaraban berlaku apabila hasil darab dua nombor melebihi nilai maksimum jenis integer dalam PHP. Kerana dalam PHP, nilai maksimum jenis integer ialah 2147483647, apabila hasil darab dua nombor melebihi nilai ini, hasil yang salah akan berlaku.

Sebagai contoh, kod berikut menunjukkan operasi pendaraban PHP mudah:

$num1 = 999999999;
$num2 = 123456789;

$result = $num1 * $num2;

echo $result;
Salin selepas log masuk

Hasil yang dijalankan ialah:

-6101065173502598407
Salin selepas log masuk

Sebenarnya, hasil yang betul mestilah: 123456787654321111. Ini kerana apabila $num1 didarab dengan $num2, hasilnya melebihi nilai maksimum jenis integer dalam PHP.

Dalam PHP, memandangkan julat nombor yang boleh diwakili oleh jenis integer adalah terhad, apabila julat ini melebihi, hasilnya akan menjadi ralat. Oleh itu, kita perlu berhati-hati apabila melakukan operasi pendaraban untuk mengelakkan masalah ketidaktepatan ini. Berikut ialah beberapa cara untuk mengelakkan masalah ketidaktepatan pendaraban:

  1. Gunakan perpustakaan fungsi BCMath yang disediakan oleh PHP

Pustaka fungsi BCMath ialah satu set fungsi matematik berketepatan tinggi dalam PHP , boleh digunakan untuk menyelesaikan masalah kehilangan integer ketepatan dalam PHP. Operasi matematik berketepatan tinggi boleh dilakukan dengan tepat dalam PHP menggunakan perpustakaan fungsi BCMath.

  1. Tukar nombor kepada rentetan untuk pengiraan

Tukar nombor kepada rentetan untuk pengiraan bagi mengelakkan masalah ketidaktepatan integer dalam PHP. Ini kerana operasi rentetan tidak dihadkan oleh julat nombor.

Sebagai contoh, kod berikut menunjukkan contoh pendaraban menggunakan rentetan:

$num1 = "999999999";
$num2 = "123456789";

$result = bcmul($num1, $num2);

echo $result;
Salin selepas log masuk

Hasilnya ialah:

123456787654321111
Salin selepas log masuk
Salin selepas log masuk
  1. Menggunakan PHP 7 The new fungsi intdiv

Terdapat fungsi intdiv baharu dalam PHP 7, yang boleh digunakan untuk mengira hasil bahagi integer dua nombor dengan tepat. Menggunakan fungsi intdiv kita boleh mengelakkan masalah ketepatan dengan pembahagian integer.

Sebagai contoh, kod berikut menunjukkan contoh penggunaan fungsi intdiv untuk pendaraban:

$num1 = 999999999;
$num2 = 123456789;

$result = intdiv($num1 * $num2, 1);

echo $result;
Salin selepas log masuk

Hasil yang dijalankan ialah:

123456787654321111
Salin selepas log masuk
Salin selepas log masuk

Ringkasnya, PHP ialah Bahasa sumber terbuka dengan fungsi yang berkuasa, tetapi apabila melakukan operasi pendaraban, penjagaan perlu diambil untuk mengelakkan masalah kehilangan ketepatan. Dengan menggunakan perpustakaan BCMath, menukar nombor kepada rentetan untuk aritmetik, atau menggunakan fungsi intdiv dalam PHP 7, kami boleh menyelesaikan masalah ini dan mengira hasil darab dua nombor dengan tepat.

Atas ialah kandungan terperinci Bagaimana untuk mengelakkan ketidaktepatan dalam pendaraban PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
php
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan