Java中的Mod产生负数[重复]

问题

这个问题在这里已有答案:

  • 使Java模数的行为与负数一样的最佳方法是什么? 5个答案

当我在Java中计算int i = -1 % 2I get-1时。在Python中,我得到了1,结果是-1 % 2。要使用模数函数在Java中获得相同的行为,我该怎么办?


#1 热门回答(133 赞)

这里的问题是在Python中%运算符返回2337222263模数并且在Java中它返回余数**.这些函数为正参数提供相同的值,但模数总是返回负输入的正结果,而其余可能给出负结果。在this question中有关于它的更多信息。

你可以通过这样做找到正值:

int i = (((-1 % 2) + 2) % 2)

或这个:

int i = -1 % 2;
if (i<0) i += 2;

(显然-1或2可以是你想要的分子或分母)


#2 热门回答(77 赞)

自Java 8以来,你可以使用Math.floorMod()方法:

Math.floorMod(-1, 2); //== 1

注意:如果模数值(此处为2)为负数,则所有输出值也将为负数。 :)

来源:https://stackoverflow.com/a/25830153/2311557


#3 热门回答(2 赞)

if b > 0:
    int mod = (mod = a % b) < 0 ? a + b : a;

不使用%操作员两次。