我有一个 PHP 函数,无法处理负数:
function isOdd($num)
{
return $num % 2 == 1;
}
但这只适用于正数。
我有一个 Perl 程序可以做完全相同的事情,而且也适用于负数。
sub isOdd()
{
my ($num) = @_;
return $num % 2 == 1;
}
我在翻译函数时有没有犯错?或者是PHP的错误?
x % y
的结果的符号取决于被除数,即x
的符号,但是在Perl中,结果的符号取决于除数,即y
的符号。因此,在PHP中,$num % 2
的结果可以是1
、-1
或0
。所以请修复您的函数,将结果与0
进行比较。function isOdd($num) {
return $num % 2 != 0;
}
5%2
和-5%2
都返回1
,而5%-2
和-5%-2
都返回-1
。注意: perl -e '@langs =(“perl -le”,“ruby -le”,“python -c”); for $dividend(“+5”,“-5”){for $divisor(“+2”,“-2”){for $lang(@langs){$cmd =“$lang \ 047print $dividend%$divisor \ 047”; print“$ cmd \ t=>”;系统$ cmd}打印“\ n”}}}'
- tchrist
$num%2
返回什么? - zerkms