我正在开发一个PHP应用程序,并且数学运算导致错误的答案显示错误的结果。所以,我开始挖掘,经过几个小时的努力,我能够发现问题。
以下是有问题的表达式:
echo -1 % 26;
答案应该是25
,但它会-1
。我不知道,我的表情有什么问题吗?
任何人都可以确定,问题在哪里?
答案 0 :(得分:1)
这是预期的行为。 From the PHP manual
模运算符%的结果与被除数具有相同的符号 - 也就是说,
$a % $b
的结果与$a
具有相同的符号
如果被除数的符号(%
左侧的部分)发生变化,结果也会发生变化。您可以通过添加除数找到负余数的正当量。 -1相当于25模26,因为-1 + 26 = 25。
因此,您可以执行以下操作以获得积极的结果:
function modulo($dividend, $divisor) {
$result = $dividend % $divisor;
return $result < 0 ? $result + $divisor : $result;
}
$calculation = modulo(-1, 26); // 25
$calculation2 = modulo(51, 26); // 25
答案 1 :(得分:0)
怎么样?
$ cat test.php
<?php
function truemod($num, $mod) {
return ($mod + ($num % $mod)) % $mod;
}
echo truemod(-1, 26).PHP_EOL;
?>
输出
$ php test.php
25