116 votes

Le meilleur moyen de faire en sorte que le module Java se comporte comme il se doit avec des nombres négatifs?

En java quand tu fais

 a % b
 

Si a est négatif, il retournera un résultat négatif au lieu de rester comme il se doit. Quelle est la meilleure façon de résoudre ce problème? La seule façon dont je peux penser est

 a < 0 ? b + a : a % b
 

157voto

Peter Lawrey Points 229686

Il se comporte comme il se doit a % b = a - a / b * b; c'est à dire qu'il est le reste.

Vous pouvez le faire (a % b + b) % b


Cette expression fonctionne comme le résultat d' (a % b) est nécessairement inférieur b, peu importe si a soit positif ou négatif. L'ajout d' b prend soin de les valeurs négatives de l' a, depuis (a % b) est une valeur négative entre -b et 0, (a % b + b) est nécessairement inférieur b et positif. La dernière modulo est-il en cas a a été positive pour commencer, puisque si a positif (a % b + b) qui allait devenir plus grand que b. Par conséquent, (a % b + b) % b ), il devient plus petit que b (et n'affecte pas négatif a des valeurs).

106voto

John Krueger Points 56

A partir de Java 8, vous pouvez utiliser Math.floorMod (int x, int y) et Math.floorMod (long x, long y) . Ces deux méthodes donnent les mêmes résultats que la réponse de Peter.

 Math.floorMod( 2,  3) =  2
Math.floorMod(-2,  3) =  1
Math.floorMod( 2, -3) = -1
Math.floorMod(-2, -3) = -2
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X