Я работаю над приложением PHP, и математическая операция вызвала неправильный ответ, который отображал неправильные результаты. Итак, я начал копать, и после нескольких часов усилий я смог обнаружить проблему.
Вот проблемный Выражение:
echo -1 % 26;
Ответ должен быть 25
но это дает -1
, Я не знаю, что-то не так с моим выражением?
Может кто-нибудь определить, где проблема?
Это ожидаемое поведение. Из руководства по PHP
Результат оператора по модулю% имеет тот же знак, что и дивиденд, то есть результат
$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