Как -13% 64 = -13 в PHP?

Вывод из этого вопроса: (Java) Как java выполняет вычисления модуля с отрицательными числами?

Anywhere, чтобы заставить PHP возвращать положительные 51?

Обновить
Ищете настройку конфигурации для исправления, вместо этого трудно угадать

Или другая математическая функция, такая как bcmath?

обновленный
Не полностью убежден в этом java-ответе, так как он не учитывает отрицательный модуль -13+(-64) =?

Solutions Collecting From Web of "Как -13% 64 = -13 в PHP?"

Если GMP доступен, вы можете использовать gmp_mod

Вычисляет n по модулю d. Результат всегда неотрицателен, знак d игнорируется.

Пример:

 echo gmp_strval(gmp_mod('-13', '64')); // 51 

Обратите внимание, что n и d должны быть ресурсами номера GMP или числовыми строками. Ничего другого не будет работать¹

 echo gmp_strval(gmp_mod(-13, 64)); echo gmp_mod(-13, 64); 

будут вместо этого возвращать -51 ( что является ошибкой ).

¹, выполняющий вышеуказанное в этом кодексе , будет производить 51 во всех трех случаях. Это не будет сделано на моей машине разработки.

В любом случае, сообщение, на которое вы ссылались, уже дало правильный ответ:

 $r = $x % $n; if ($r < 0) { $r += abs($n); } 

Где $ x = -13 и $ n = 64.

Операция modulo должна найти остаток от деления числа на другой. Но, строго говоря, на большинстве основных языков программирования функция modulo работает, если дивиденды или / и делители отрицательны . Сюда входят PHP, Perl, Python, Java, C, C ++ и т. Д.

Почему я говорю о неисправности? Поскольку согласно математическому определению остаток должен быть равен нулю или положителен .

Простое решение состоит в том, чтобы самостоятельно обрабатывать дело:

 if r < 0 then r = r + |divisor|; 

| Делитель | является абсолютным значением делителя.

Другое решение – использовать библиотеку (как указал @Gordon). Однако я бы не использовал библиотеку для обработки простого случая, подобного этому.

В руководстве по PHP говорится, что

Результат оператора модуля% имеет тот же знак, что и дивиденд, т. Е. Результат $ a% $ b будет иметь тот же знак, что и $ a. Например

поэтому это не настраивается. Используйте варианты, предложенные в вопросе, который вы связали с