Результат оператора странного модуля

Я работаю над приложением PHP, и математическая операция вызвала неправильный ответ, который отображал неправильные результаты. Итак, я начал копать, и после нескольких часов усилий я смог обнаружить проблему.

Вот проблемный Выражение:

echo -1 % 26;

Ответ должен быть 25 но это дает -1, Я не знаю, что-то не так с моим выражением?

Вывод PHP:
Вывод PHP

Калькулятор:
Выход калькулятора

Может кто-нибудь определить, где проблема?

-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
1

Другие решения

Как насчет ?

$ cat test.php
<?php

function truemod($num, $mod) {
return ($mod + ($num % $mod)) % $mod;
}

echo truemod(-1, 26).PHP_EOL;
?>

Выход

$ php test.php
25
0

По вопросам рекламы [email protected]