2012-03-24 233 views
0

我爲一個項目使用PHP,我期望-1 % 4返回3。然而,最後的結果是在PHP -1,我不知道爲什麼:-1%4的正確答案是什麼?

php > echo -1 % 4; 
-1 

我在Ruby的IRB檢查,結果是3

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

%手段'-1 MOD(4)'和其在數學 – safarov 2012-03-24 20:56:30

+2

等於-1 @ safarov:實際上,'%'通常被定義爲**餘數**運算符,它具有較少定義的數學定義。 – 2012-03-24 20:59:56

+4

@safarov「數學」是一個廣泛的聲明。如果你正在處理Z_4,-1和3是同一個對象。 – Dougal 2012-03-24 21:00:28

回答

5

,因爲它在分工來定義,例如:

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

對於具有負面結果的部門,有兩種可能的定義;要麼你向零轉彎,要麼你轉向負無窮。不同的編程語言已經做出了不同的選擇。

請參閱http://en.wikipedia.org/wiki/Modulo_operator#Remainder_calculation_for_the_modulo_operation瞭解更多信息。

+0

我可以看到這個錯誤,但不會計算出'a - a'從而創建0嗎? – 2012-03-24 20:57:45

+0

@RobinCastlin:不,因爲這是在整數算術中執行的。 – 2012-03-24 20:58:55

1

在這兩種特定語言中,當處理涉及負操作數的整數分割時,PHP將結果向零迴繞,而Ruby向-infinity迴繞。


在PHP中,從Arithmetic Operators

模數運算符%的結果具有相同的符號作爲被除數。

在Ruby,從Numeric#divmod

商數朝向-infinity四捨五入

相關問題