webentwicklung-frage-antwort-db.com.de

Mod in Java erzeugt negative Zahlen

Wenn ich int i = -1 % 2 Berechne, erhalte ich -1 In Java. In Python erhalte ich 1 Als Ergebnis von -1 % 2. Was muss ich tun, um das gleiche Verhalten in Java mit der Modulo-Funktion zu erzielen?

130
Christian

Das Problem hierbei ist, dass in Python der Operator% den Wert modulus und in Java den Wert rest zurückgibt. Diese Funktionen geben für positive Argumente dieselben Werte an, aber der Modul gibt für negative Eingaben immer positive Ergebnisse zurück, während der Rest negative Ergebnisse liefern kann. Weitere Informationen finden Sie in diese Frage .

Sie können den positiven Wert folgendermaßen ermitteln:

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

oder dieses:

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

(Offensichtlich kann -1 oder 2 sein, was auch immer der Zähler oder Nenner sein soll.)

156
andrewmu

Seit Java 8 können Sie die Math.floorMod () -Methode verwenden:

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

Hinweis: Wenn der Modulo-Wert (hier 2) ist negativ, alle Ausgabewerte sind auch negativ. :)

Quelle: https://stackoverflow.com/a/25830153/2311557

93
codepleb

Wenn Sie brauchen n % m dann:

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

mathematische Erklärung:

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

Verwendet nicht das % Operator zweimal.

2
Dico