模数运算符应该显示余数。与echo(34%100)
输出34
一样。但是,为什么我的代码Division by zero
echo(34%4294967296)
”错误
答案 0 :(得分:17)
4294967296
是2^32
并且不能表示为32位数 - 它回绕为0.如果使用64位版本的PHP,它可能会起作用。
您可以使用浮点模数fmod来获得您想要的而不会溢出。
答案 1 :(得分:7)
https://bugs.php.net/bug.php?id=51731
2^31 is the largest integer you can get on Windows.
如果您仍想修改大数字,请使用bcmod。
答案 2 :(得分:2)
有很多关于mod的报道在php中使用大整数。可能是计算中的溢出,甚至是那个数字本身会给你带来错误。最好使用大量的库。查看gmp或bcmath。
答案 3 :(得分:2)
我发现这个问题在使用模数"时搜索"除零错误,但原因不同。
当命名符小于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