Il semble que lorsque je calcule int i = -1 % 2
J'obtiens -1 en Java. En Python, j'obtiens 1. Que dois-je faire pour obtenir le même comportement en Java ?
Réponses
Trop de publicités?Il est assez courant dans les langages dérivés du C que le module d'un nombre négatif soit négatif. Vous pouvez trouver la valeur positive en faisant ceci :
int i = (((-1 % 2) + 2) % 2)
ou ceci :
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 le Math.floorMod() méthode :
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 le modulus est une puissance de 2, vous pouvez utiliser un masque de bits :
int i = -1 & ~-2; // -1 MOD 2 is 1
Par comparaison, le langage Pascal fournit deux opérateurs ; REM prend le signe du numérateur ( x REM y
est x - (x DIV y) * y
où x DIV y
est TRUNC(x / y)
) et MOD nécessite un dénominateur positif et renvoie un résultat positif.