使用模数时除以零误差

时间:2013-08-06 00:09:57

标签: php

模数运算符应该显示余数。与echo(34%100)输出34一样。但是,为什么我的代码Division by zero

出现“echo(34%4294967296)”错误

4 个答案:

答案 0 :(得分:17)

42949672962^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