Мод в Java производит отрицательные числа [дубликат]



этот вопрос уже есть ответ здесь:



когда я расчета int i = -1 % 2 Я -1 в Java. В Python, я получаю 1 в результате -1 % 2.
Что я должен сделать, чтобы получить такое же поведение в Java с функция по модулю?

519   5  

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) отрицательно, все выходные значения тоже будут отрицательными. :)

Источник:https://stackoverflow.com/a/25830153/2311557

if b > 0:
    int mod = (mod = a % b) < 0 ? a + b : a;

Не используйте

Если вам нужно 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

    Ничего не найдено.