Мод в Java производит отрицательные числа [дубликат]
этот вопрос уже есть ответ здесь:
лучший способ заставить модуль Java вести себя так, как он должен с отрицательными числами?
6 ответов
когда я расчета int i = -1 % 2 Я -1 в Java. В Python, я получаю 1 в результате -1 % 2.
Что я должен сделать, чтобы получить такое же поведение в Java с функция по модулю?
5 ответов:
проблема здесь в том, что в Python оператор % возвращает модуль и в Java он возвращает остаток. Эти функции дают одинаковые значения для положительных аргументов, но модуль всегда возвращает положительные результаты для отрицательных входных данных, в то время как остаток может дать отрицательные результаты. Есть еще немного информации об этом в этот вопрос.
Вы можете найти положительное значение, делая это:
int i = (((-1 % 2) + 2) % 2)или это:
int i = -1 % 2; if (i<0) i += 2;(очевидно, 1 или 2 может быть все, что вы хотите числитель или знаменатель будет)
Начиная С Java 8 можно использовать математика.floorMod () способ:
Math.floorMod(-1, 2); //== 1Примечание: Если значение по модулю (здесь
2) отрицательно, все выходные значения тоже будут отрицательными. :)
Если вам нужно
n % mзатем:int i = (n < 0) ? (m - (abs(n) % m) ) %m : (n % m);математическое объяснение:
n = -1 * abs(n) -> n % m = (-1 * abs(n) ) % m -> (-1 * (abs(n) % m) ) % m -> m - (abs(n) % m))
если модуль равен степени 2, то вы можете использовать битовую маску:
int i = -1 & ~-2; // -1 MOD 2 is 1для сравнения язык Паскаль предоставляет два оператора; REM принимает знак числителя (
x REM yиx - (x DIV y) * yздесьx DIV y- этоTRUNC(x / y)) и мод требует положительного знаменателя и возвращает положительный результат.
Comments