2011-03-02 28 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

相關問題