¿La mejor forma de hacer que el módulo de Java se comporte como debería con números negativos?


Answers

A partir de Java 8, puede usar Math.floorMod (int x, int y) y Math.floorMod (long x, long y) . Ambos métodos devuelven los mismos resultados que la respuesta de Peter.

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

En Java cuando lo haces

a % b

Si a es negativo, devolverá un resultado negativo, en lugar de ajustarse a b como debería. ¿Cuál es la mejor manera de arreglar esto? La única forma en que puedo pensar es

a < 0 ? b + a : a % b



En teoría de números, el resultado es siempre positivo. Supongo que este no es siempre el caso en los lenguajes de programación porque no todos los programadores son matemáticos. Mis dos centavos, lo consideraría un defecto de diseño del lenguaje, pero no puede cambiarlo ahora.

= MOD (-4,180) = 176 = MOD (176, 180) = 176

porque 180 * (-1) + 176 = -4 lo mismo que 180 * 0 + 176 = 176

Usando el ejemplo de reloj aquí, http://mathworld.wolfram.com/Congruence.html no diría que duration_of_time mod cycle_length es -45 minutos, usted diría 15 minutos, aunque ambas respuestas satisfacen la ecuación base.




Links