Как вычислить остаток от деления в java
Перейти к содержимому

Как вычислить остаток от деления в java

  • автор:

Как работает остаток от деления java

Остаток от деления — это целое число, полученное в результате операции деления с остатком. Если остаток от деления равен, то число делится на делитель нацело. В Java остаток от деления одного числа на другое можно получить при помощи оператора %

System.out.println(3 % 2); // => 1 System.out.println(4 % 2); // => 0 

Рассмотрим работу оператора на примере. Поделим число 78 на 33. При делении мы получим неполное частное 2 и остаток от деления. Чтобы убедиться в правильности результата, нужно неполное частное умножить на делитель и прибавить остаток от деления:

Как работает оператор остатка от деления?

Соответственно я ожидаю, что при использовании оператора \ в целочисленных значениях результат деления будет 0 (так как у целого числа нет дробной части), а в числах с плавающей точкой ответ будет 0,6666666. И на выходе так и получается, всё работает правильно.

При использовании оператора % я ожидаю, что остаток от деления будет 66666, так как само значение 0,6666, целая часть отбрасывается, значит остается 6666, но почему-то результатом является число 2 для целочисленных значений и 2.0 для значений с плавающей точкой

Подскажите пожалуйста, откуда взялось это 2 и почему оно там взялось, ведь если по логике остаток от деления должен быть совсем другим? Или я неправильно понимаю смысл оператора % ?

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как работает оператор вычисления остатка от деления (%)?
Доброго времени суток! Прошу помощи у опытных товарищей т.к. сам ещё совсем зеленый. Объясните.

Как определить, делится ли число на «3» без остатка, не используя деления и определения остатка от деления
Написать подпрограмму, которая определяет, делится ли число на «3» без остатка, не используя.

Оператор остатка от деления
Доброго времени суток! Столкнулась с проблемой неполного понимания работы оператора %. Конкретно.

Используя операции деления без остатка и взятие остатка от деления, найти количество и сумму цифр числа
Для первой задачи использованием цикла while; Дано целое число N. Используя операции деления.

632 / 348 / 129
Регистрация: 01.02.2020
Сообщений: 1,037

Лучший ответ

Сообщение было отмечено DSLS как решение

Решение

Остаток от целочисленного деления. Он так работает.
А если тебе надо именно дробную часть то можешь воспользоваться Math.floor(double) . Он её отбрасывает.

Остаток от деления в Java и Python

Решаю одну и ту же простую задачу на Python и Java. Алгоритм идентичен, но результаты почему-то разные. Причина нашлась: в решении использую «%» (остаток от деления) и, если первая переменная имеет отрицательное значение, то почему-то результаты разнятся:

print(-1 % 109) #Python. 
System.out.println(-1 % 109); //Java. 

Вывод: -1 Объясните, пожалуйста, почему разные результаты?
Отслеживать
задан 11 янв 2022 в 21:12
133 1 1 серебряный знак 9 9 бронзовых знаков

Разная реализация нахождения остатка для отрицательных аргументов зависит от конкретного языка. Оба результата правильны. Какой результат вам нужен?

11 янв 2022 в 21:42
В вике есть статья, рассматривающая эту тему (в ней есть таблица про знак остатка в разных языках)
11 янв 2022 в 21:46

Спасибо за ответ! Мне нужен был именно положительный остаток, как в Python. Решение найдено с использованием Math.floorMod()

Вычисляем проценты и
остаток от деления нацело

Во многих приложениях есть скидки — столько-то процентов на тот или иной товар. Поэтому программисты должны уметь запрограммировать взятие процента — просто умножить на число процентов и поделить на 100. Но не стоит путать оператор % и взятие процента. Исторически сложилось, что символ % обозначает в Java остаток от деления нацело.

Когда вам нужно посчитать процент от заданного числа, то нужно умножить это число на количество процентов и поделить на 100. Аналогичный способ – умножить число на ноль запятая количество процентов. Проценты часто используются, чтобы рассчитать значения цены со скидкой или когда вам известна пропорция — сколько A составляет от B в процентах.

Пример. Обычная цена товара составляет 4000 руб, но сейчас действует скидка 15 процентов. Выведите на экран сумму со скидкой:

// не забываем о коварстве деления нацело и пишем 15.0, // а не просто 15 - см. предыдущую тему System.out.println (4000*15.0/100); // это будет 15% от исходной величины - 600 рублей System.out.println (4000*0.15); // это то же самое // Теперь сама новая цена - это старая минус сумма скидки: System.out.println (4000 - 4000*0.15); // Аналогично мы можем писать и с помощью переменных double price = 4000; // исходная цена - могла быть прочитана из файла или базы данных double discount_percent = 15; // величина скидки в процентах double discount_value = price * discount_percent / 100; // величина скидки в рублях double new_price = price - discount_value; // новая цена за вычетом скидки

Не стоит путать оператор % и взятие процента. Исторически сложилось, что символ % обозначает в Java вычисление остатка от деления нацело.

Посмотрим в коде:

/* Посчитаем остаток от деления 100 на 10. Делится нацело, поэтому остаток – ноль*/ int s = 100%10; // 100 не делится нацело на 11 – в остатке остаётся 1 s = 101%10; // s равно 1 s = 102%10 // s равно 2 s = 119%10 // s равно 9 s = 120%10 // s равно 0, деление нацело, то есть остатка нет

В программировании часто используется остаток от деления, чтобы описать циклически меняющуюся величину. Дело в том, что если исходная величина все время возрастает, то остаток от деления на постоянную величину будет расти, но затем пойдет снова с нуля. Посмотрим в коде, заодно вспомним оператор инкремента ++ (увеличить переменную на 1):

int a = 3; System.out.println ( a % 3); // распечатать остаток от деления a на 3. Сейчас он равен нулю. a ++; // означает "увеличить a на 1, эквивалентно a += 1 . Теперь a стало равно 4 System.out.println ( a % 3); // распечатать остаток от деления a на 3. Сейчас это 1. a ++; // а равно 5 System.out.println ( a % 3); // остаток 2 a ++; // а равно 6 System.out.println ( a % 3); // остаток 0 a ++; // а равно 7 System.out.println ( a % 3); // остаток 1 // Как видно, выражение a%3 все время пробегает повторяющийся набор значений: // 0, 1, 2, 0, 1, 2, 0, 1, 2 и так далее.

Как видите, мы все время повторяли команды a++ и распечатка a%3. Чтобы не писать один и тот же код много раз применяют циклы, они позволяют запускать кусок кода много раз подряд. Но о циклах в следующих разделах, а пока мы поняли, что % — остаток от деления одного числа на другое бывает полезен, чтобы сформировать последовательность чисел от нуля до заданного числа, повторяющуюся подряд нужное число раз. Такие последовательности бывают нужны в самых разных задачах, например, когда вы хотите задать координаты персонажам в игре и расставить их по экрану — каждый следующий правее, и так до конца экрана, а потом снова слева направо уже по следующей строчке.

Самое главное мы уже освоили. Теперь время решать задачи. Ответьте на несколько вопросов, чтобы лучше усвоился новый материал:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *