Mod in Java produceert negatieve getallen

Als ik int i = -1 % 2bereken, krijg ik -1in Java. In Python krijg ik 1als 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 % mnodig 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.

Other episodes