使用模数时除以零误差

Nok*_*hen 14 php

模数运算符应该显示余数.喜欢echo(34%100)输出34.但是为什么我的Division by zero代码会出现" "错误echo(34%4294967296)

mvp*_*mvp 18

4294967296是2^32和不能表示为32位数 - 它回到0.如果您使用64位版本的PHP,它可能会工作.

您可以使用浮点模数fmod来获得您想要的而不会溢出.

  • 64位PHP在Windows上还不支持64位整数,所以即便如此也无济于事. (2认同)

Dav*_*hen 7

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

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

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

  • @Nok:我认为这是一个很好的问题:PHP中计算模块的最佳功能是什么?或者`fmod()`,`bcmod()`和`gmp_mod()`之间的区别 (3认同)
  • @nok:看到这个页面上的警告也有一个指向任意长度类型的链接.http://www.php.net/manual/en/language.types.float.php (2认同)

ran*_*ame 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
Run Code Online (Sandbox Code Playgroud)