Als ik int i = -1 % 2
bereken, krijg ik -1
in Java. In Python krijg ik 1
als resultaat van -1 % 2
.
Wat moet ik doen om hetzelfde gedrag in Java te krijgen met de modulo-functie?
Antwoord 1, autoriteit 100%
Het probleem hier is dat in Python de operator % de modulusretourneert en in Java de rest. Deze functies geven dezelfde waarden voor positieve argumenten, maar de modulus geeft altijd positieve resultaten voor negatieve invoer, terwijl de rest negatieve resultaten kan geven. Er is wat meer informatie over in deze vraag.
Je kunt de positieve waarde vinden door dit te doen:
int i = (((-1 % 2) + 2) % 2)
of dit:
int i = -1 % 2;
if (i<0) i += 2;
(uiteraard kan -1 of 2 zijn wat je wilt dat de teller of noemer is)
Antwoord 2, autoriteit 67%
Sinds Java 8kunt u de Math.floorMod()methode:
Math.floorMod(-1, 2); //== 1
Opmerking: Als de modulo-waarde (hier 2
) negatief is, zullen alle uitvoerwaarden ook negatief zijn. 🙂
Bron: https://stackoverflow.com/a/25830153/2311557
Antwoord 3
Als je n % m
nodig hebt, dan:
int i = (n < 0) ? (m - (abs(n) % m) ) %m : (n % m);
Mathematical Explanation:
n = -1 * abs(n)
-> n % m = (-1 * abs(n) ) % m
-> (-1 * (abs(n) % m) ) % m
-> m - (abs(n) % m))
4
if b > 0:
int mod = (mod = a % b) < 0 ? a + b : a;
Gebruik de %
tweemaal.