int i = -1 % 2
を計算すると、Javaで-1
を取得します。 Pythonでは、1
の結果として-1 % 2
を取得します。 modulo関数を使用してJavaで同じ動作を得るには何をしなければなりませんか?
ここでの問題は、Pythonでは%演算子がmodulusを返し、Javaでは剰余。これらの関数は正の引数に同じ値を与えますが、モジュラスは負の入力に対して常に正の結果を返しますが、残りは負の結果を与える場合があります。 この質問 にそれに関する情報があります。
これを行うことで正の値を見つけることができます:
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
)が負の場合、すべての出力値も負になります。 :)
n % m
が必要な場合:
int i = (n < 0) ? (m - (abs(n) % m) ) %m : (n % m);
数学的な説明:
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回使用しません。