Java中的Mod产生负数

Chr*_*ian 142 java math mod

当我计算int i = -1 % 2 我得到-1Java.在Python中,我得到1了结果-1 % 2.使用模数函数在Java中获得相同的行为我需要做什么?

and*_*wmu 162

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

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

int i = (((-1 % 2) + 2) % 2)
Run Code Online (Sandbox Code Playgroud)

或这个:

int i = -1 % 2;
if (i<0) i += 2;
Run Code Online (Sandbox Code Playgroud)

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

  • @Cachapa请提供一个示例来支持该声明.我认为OP的解决方案已经是通用的,考虑`((( - 3%4)+ 4)%4)= 1`(预期结果)以及`(((3%4)+ 4)%4 )= 3`(也是预期的结果).它适用于正面和负面的红利. (5认同)
  • @pgreze设想“ n = -1000”和“ m = 3”的情况,正确的答案是“ 2”,但是在您的公式中答案仍然是否定的。 (3认同)
  • @amit_gr - 不,我相信它一般都有用 (2认同)
  • @The111想象一下整数的范围是[-8,7],(((5%6)+ 6)%6)=((5 + 6)%6)=( - 5%6)= -5,但5%6应该是积极的.用适当的大数字替换32位整数,如536887296和1610612736,很明显第二种方法是更好的方法. (2认同)

cod*_*leb 98

从Java 8开始,您可以使用Math.floorMod()方法:

Math.floorMod(-1, 2); //== 1
Run Code Online (Sandbox Code Playgroud)

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

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

  • 并且他们再次只为整数做了,傻瓜!:) (11认同)
  • Java 8+的最佳答案 (3认同)