我正在一个PHP应用程序和数学运算导致错误的答案显示错误的结果。所以,我开始挖掘,经过几个小时的努力,我才发现问题。奇怪的模数运算符结果 - PHP
这里是有问题的表达:
echo -1 % 26;
答案应该是25
但它给-1
。我不知道,我的表情有什么问题吗?
谁能请确定是哪里出了问题?
我正在一个PHP应用程序和数学运算导致错误的答案显示错误的结果。所以,我开始挖掘,经过几个小时的努力,我才发现问题。奇怪的模数运算符结果 - PHP
这里是有问题的表达:
echo -1 % 26;
答案应该是25
但它给-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
怎么样?
$ cat test.php
<?php
function truemod($num, $mod) {
return ($mod + ($num % $mod)) % $mod;
}
echo truemod(-1, 26).PHP_EOL;
?>
输出
$ php test.php
25
它适用于此,但会导致与其他计算问题。但无论如何,谢谢! – Alena
这是不是征兆,结果也不同 – Alena
@Alena已答复更新,以说明为什么是这样的话:) – iblamefish
感谢,但我不认为如果是这样的正确的方式来处理它。因为我需要添加额外的检查,如果数字是负数,然后添加它而不是计算模数。 – Alena