2011-03-02 53 views
8

我有这个PHP函数不为负数的工作:为什么模数运算符在Perl和PHP中表现不同?

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

,但它为正数。

我有这样的Perl例程做同样的事情并为负数也

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

工作难道我做的翻译功能的任何错误?或者它是PHP的错误?

+0

“不工作”是不是一个解释 – zerkms 2011-03-02 04:24:14

+0

我的意思是说它给出错误的结果 – user640527 2011-03-02 04:27:33

+0

@ user640527:和你为什么不只是看着在与1进行比较之前,'$ num%2'返回了什么? – zerkms 2011-03-02 04:28:35

回答

19

在PHP的x % y的结果的符号是被除数这是x
在Perl它是除数y的符号的符号。

因此在PHP中,$num % 2的结果可以是1,-10

所以解决您的功能与0比较结果:

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

但是为什么?这是基本的数学。它为什么会改变? – user640527 2011-03-02 04:35:37

+2

@ user640527:它是一个语言设计决定。在我认识的语言中,Perl和Ruby返回了除数和C的符号,C++,Java和PHP返回了分红符号。 – codaddict 2011-03-02 04:56:04

+1

+1(相关文档)http://www.php.net/manual/en/language.operators.arithmetic.php:“模数运算符%的结果与红利具有相同的符号 - 也就是结果$ a%$ b将具有与$ a相同的符号。“ – 2011-03-02 05:44:43

相关问题