源自这个问题:(Java)Java如何用负数进行模数计算?
有什么地方可以强制 PHP 返回正数 51?
更新
寻找要修复的配置设置,而不是难以猜测
或其他数学函数,如 bcmath?
更新
不完全相信那个java答案,因为它没有考虑负模数
-13+(-64) =?
源自这个问题:(Java)Java如何用负数进行模数计算?
有什么地方可以强制 PHP 返回正数 51?
更新
寻找要修复的配置设置,而不是难以猜测
或其他数学函数,如 bcmath?
更新
不完全相信那个java答案,因为它没有考虑负模数
-13+(-64) =?
无论如何,您引用的帖子已经给出了正确的答案:
$r = $x % $n;
if ($r < 0)
{
$r += abs($n);
}
其中 $x = -13 和 $n = 64。
模运算应该找到一个数字除以另一个数字的余数。但严格来说,在大多数主流编程语言中,如果除数或/和除数为负数,模运算就会出错。这包括PHP、Perl、Python、Java、C、C++ 等。
为什么我说故障?因为根据数学定义,余数必须为零或正数。
简单的解决方案是自己处理此案:
if r < 0 then r = r + |divisor|;
|除数| 是除数的绝对值。
另一个解决方案是使用库(正如@Gordon 指出的那样)。但是,我不会使用库来处理这样的简单案例。
if
当您可以立即计算时,我讨厌在这种情况下使用。
$r = ($x % $n + $n) % $n;
何时$n
为正。