Quand je calcule int i = -1 % 2
Je reçois -1
en Java. En Python, je reçois 1
à la suite de -1 % 2
. Que dois-je faire pour obtenir le même comportement dans Java avec la fonction modulo?
Le problème ici est que dans Python, l'opérateur% renvoie le module et dans Java il renvoie le reste . Ces fonctions donnent les mêmes valeurs pour les arguments positifs, mais le module renvoie toujours des résultats positifs pour les entrées négatives, alors que le reste peut donner des résultats négatifs. Il y a plus d'informations à ce sujet dans cette question .
Vous pouvez trouver la valeur positive en faisant ceci:
int i = (((-1 % 2) + 2) % 2)
ou ca:
int i = -1 % 2;
if (i<0) i += 2;
(évidemment -1 ou 2 peut être ce que vous voulez que le numérateur ou le dénominateur soit)
Depuis Java 8 vous pouvez utiliser la méthode Math.floorMod () :
Math.floorMod(-1, 2); //== 1
Remarque: Si la valeur modulo (ici 2
) est négatif, toutes les valeurs de sortie seront également négatives. :)
Si tu as besoin n % m
puis:
int i = (n < 0) ? (m - (abs(n) % m) ) %m : (n % m);
explication mathématique:
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;
N'utilise pas le %
opérateur deux fois.