Какой правильный ответ -1% 4? - PullRequest
0 голосов
/ 25 марта 2012

Я использую PHP для проекта и ожидаю, что -1 % 4 вернет 3.Тем не менее, окончательный результат - -1 в PHP, и я не знаю почему:

php > echo -1 % 4;
-1

Я проверил в Ruby IRB, и результат 3:

irb(main):001:0> puts -1 % 4
3

Ответы [ 2 ]

5 голосов
/ 25 марта 2012

Потому что оно определено в терминах деления, такое что:

a%b == a - (a/b)*b

Для делений с отрицательными результатами есть два возможных определения; либо вы округляетесь до нуля, либо вы округляетесь до отрицательной бесконечности. Различные языки программирования сделали этот выбор по-разному.

См. http://en.wikipedia.org/wiki/Modulo_operator#Remainder_calculation_for_the_modulo_operation для получения дополнительной информации.

1 голос
/ 09 июля 2015

В этих двух конкретных языках при обработке целочисленных делений с отрицательными операндами PHP округляет результат до нуля, а Ruby округляет до -infinity.


В PHP от Арифметические операторы :

Результат оператора модуля % имеет тот же знак, что и дивиденд.

В Ruby от Numeric#divmod:

Коэффициент округляется до -infinity

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...