使Java的模量表现得像负数一样的最佳方法?
2022-08-31 08:33:53
在java中,当你这样做
a % b
如果 a 为负,它将返回负结果,而不是像它应该的那样绕到 b。解决此问题的最佳方法是什么?我能想到的唯一方式是
a < 0 ? b + a : a % b
在java中,当你这样做
a % b
如果 a 为负,它将返回负结果,而不是像它应该的那样绕到 b。解决此问题的最佳方法是什么?我能想到的唯一方式是
a < 0 ? b + a : a % b
它的行为应该 a % b = a - a / b * b;即它是其余的。
你可以做 (a % b + b) % b
这个表达式的工作原理是 结果必然低于 ,无论是正数还是负数。加法处理负值,因为 是 和 之间的负值,必然低于 和 正值。最后一个模是存在的,以防万一开始是正数,因为如果为正数将变大于 。因此,将其变为小于再次(并且不会影响负值)。(a % b)
b
a
b
a
(a % b)
-b
0
(a % b + b)
b
a
a
(a % b + b)
b
(a % b + b) % b
b
a
从Java 8开始,您可以使用Math.floorMod(int x,int y)和Math.floorMod(long x,long y)。这两种方法返回的结果与 Peter 的答案相同。
Math.floorMod( 2, 3) = 2
Math.floorMod(-2, 3) = 1
Math.floorMod( 2, -3) = -1
Math.floorMod(-2, -3) = -2