Предполагается, что оператор модуля должен показать остаток. Как и для echo(34%100)
выходов 34
. Но почему я получаю ошибку "Division by zero
" для этого кода echo(34%4294967296)
Деление на нулевую ошибку при использовании модуля
Ответ 1
4294967296
является 2^32
и не может быть представлен как 32-битное число - он обертывается обратно на 0. Если вы используете 64-разрядную версию PHP, это может сработать.
Возможно, вы сможете использовать модуль с плавающей запятой fmod, чтобы получить то, что вы хотите, без переполнения.
Ответ 2
https://bugs.php.net/bug.php?id=51731
2^31 is the largest integer you can get on Windows.
Если вы все еще хотите модерировать большие числа, используйте bcmod.
Ответ 3
Там много сообщений о том, что мода становится неустойчивым с большими целыми числами в php. Может быть переполнение в расчете или даже в том самом номере, которое будет давать вам ошибки. Лучше всего использовать для этого большую библиотеку. Проверьте gmp или bcmath.
Ответ 4
Я нашел этот вопрос в поиске "деления на нулевую ошибку при использовании модуля", но причина была иной.
Модуль (оператор %
) не будет работать, если denomenator меньше 1. Используя fmod(), решает проблему.
Пример:
$num = 5.1;
$den = .25;
echo ($num % $den);
// Outputs Warning: Division by zero
echo fmod($num, $den);
// Outputs 0.1
$num = 5.1;
$den = 1;
echo ($num % $den);
// Outputs 0, which is incorrect
echo fmod($num, $den);
// Outputs 0.1, which is correct