Java中的Mod产生负数

这似乎是当我计算int i = -1 % 2我得到-1在Java中。 在Python中,我得到1.我必须做什么才能在Java中获得相同的行为?

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

你可以通过这样做find正面的价值:

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

或这个:

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

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

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

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

注意:如果模数值(这里是2 )是负数,所有的输出值也是负数。 🙂

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

如果你需要n % m那么:

 int i = (n < 0) ? (m - (abs(n) % m) ) %m : (n % m); 

math解释:

 n = -1 * abs(n) -> n % m = (-1 * abs(n) ) % m -> (-1 * (abs(n) % m) ) % m -> m - (abs(n) % m)) 
 if b > 0: int mod = (mod = a % b) < 0 ? a + b : a; 

不要使用%运算符两次。

如果模数是2的乘方,那么你可以使用一个位掩码:

 int i = -1 & ~-2; // -1 MOD 2 is 1 

比较而言,Pascal语言提供了两个操作符; REM取分子符号( x REM yx - (x DIV y) * y ,其中x DIV yTRUNC(x / y) ),MOD要求正分母并返回正的结果。