15

模运算符应该显示余数。就像echo(34%100)输出一样34。但是为什么我会收到Division by zero此代码的“”错误echo(34%4294967296)

4

4 回答 4

19

42949672962^32并且不能表示为 32 位数字 - 它会返回 0。如果您使用 64 位版本的 PHP,它可能会工作。

您也许可以使用浮点模数fmod来获得您想要的东西而不会溢出。

于 2013-08-06T00:13:40.253 回答
7

我发现这个问题正在搜索“使用模数时除以零错误”,但原因不同。

%当分母小于 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
于 2014-08-31T19:16:27.727 回答
7

https://bugs.php.net/bug.php?id=51731

2^31 is the largest integer you can get on Windows.

如果您仍想修改大数,请使用bcmod

于 2013-08-06T00:14:30.063 回答
2

有很多关于 mod 在 php 中使用大整数的报告。可能是计算中的溢出,甚至可能是那个数字本身会给你带来错误。最好为此使用大量库。查看 gmp 或 bcmath。

于 2013-08-06T00:26:16.813 回答