Почему оператор модуля работает по-разному в Perl и PHP? - PullRequest
8 голосов
/ 02 марта 2011

У меня есть функция PHP, которая не работает для отрицательных чисел:

function isOdd($num) 
{
   return $num % 2 == 1; 
}

, но работает для положительных чисел.

У меня есть эта подпрограмма Perl, которая делает то же самое и работает для отрицательного числа также

sub isOdd()
{
  my ($num) = @_;
  return $num % 2 == 1;
}

Я сделал какую-то ошибку в переводе функции?или это ошибка PHP?

1 Ответ

20 голосов
/ 02 марта 2011

В PHP знак результата x % y - это знак дивиденда , который равен x, но
в Perl - это знак делителя , которыйравно y.

Так что в PHP результат $num % 2 может быть 1, -1 или 0.

Так что исправьте свою функцию, сравните результат с0:

function isOdd($num) { 
  return $num % 2 != 0; 
}
...