我正在使用PHP进行项目,我希望-1 % 4
返回3
。但是,最终结果是PHP中的-1
,我不知道原因:
php > echo -1 % 4;
-1
我检查了Ruby IRB,结果是3
:
irb(main):001:0> puts -1 % 4
3
答案 0 :(得分:5)
因为它是根据划分来定义的,所以:
a%b == a - (a/b)*b
对于结果为负的部门,有两种可能的定义;要么向零舍入,要么向负无穷大舍入。不同的编程语言做出了不同的选择。
有关详细信息,请参阅http://en.wikipedia.org/wiki/Modulo_operator#Remainder_calculation_for_the_modulo_operation。
答案 1 :(得分:1)
在这两种特定语言中,当处理涉及负操作数的整数除法时,PHP将结果舍入为零,而Ruby则向-infinity舍入。
在PHP中,来自Arithmetic Operators:
模数运算符
%
的结果与被除数的符号相同。
在Ruby中,来自Numeric#divmod
:
商指向-infinity