0

Кредитный калькулятор

Показывает скрытые ошибки, хотя результат в задаче верный import java.util.Scanner; public class Program { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int amount = scanner.nextInt(); for (int month = 6; month >= 1; month--) { amount = amount - (int)Math.round(amount*0.1); } System.out.println(amount); } }

27th Dec 2020, 12:18 PM
Ivan Golenovich
Ivan Golenovich - avatar
5 Réponses
+ 5
Ivan Golenovich Use Math.ceil instead of Math.round And take amout as double. double amount= scanner.nextDouble(); for(int month=6; month >= 1; month--) { amount = amount - Math.ceil(amount * 0.1); } System.out.print((int) amount);
27th Dec 2020, 12:58 PM
A͢J
A͢J - avatar
+ 4
Долго разбирался, ответ нашел методом тыка. В общем этот код при вводе amount = 100000 дает НЕ правильный ответ 53145: for (int i = 0; i < 6; i++) { amount = (int) (amount - Math.ceil(amount / 10)); } System.out.println(amount); А вот этот код при вводе 100000 дает правильный ответ 53144: for (int i = 0; i < 6; i++) { amount = (int) (amount - Math.ceil(amount * 0.1)); } System.out.println(amount); Вся разница в "/ 10" или "* 0,1". По идее одно и тоже, но для JAVA видимо это важно. Почему, я так и не понял, если есть кто понимающий - объясните.
30th Jan 2021, 8:42 PM
Andrey Ignatov
+ 3
Тоже промаялся с этим заданием for(int i = 0; i < 3; i++) { amount = amount - amount * 10 / 100; // ВОТ ТАК ВЕРНО! amount = amount - amount / 100 * 10; // А ВОТ ТАК НЕТ! }
18th Dec 2021, 8:19 AM
Вадим Нечеухин
+ 2
Разница между /10 и *0.1 к ответу Андрея: Скорее всего дело в этом /10 - целочисленное деление Поэтому например результат выражения 14/10=1.4, округляется до 1 В примере с 100000 нет чисел с плавающей точкой Но при операциях с длинными числами такое происходит из за того, что в памяти может храниться ограниченное количество битов информации (в двоичном формате) И в какой то момент число начинает округляться Если есть кто более понимающий - объясните
9th Nov 2021, 5:14 AM
Samokhleb Eleonora
Samokhleb Eleonora - avatar
+ 1
Июль 2021: import java.util.Scanner; public class Program { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int amount = scanner.nextInt(); int proc = amount; for(int i = 0; i<3; i++) { int pay = ((amount*10)/100); proc = amount - pay; amount = proc; } System.out.println(proc); } }
14th Jul 2021, 1:49 PM
Сипачёв Алексей Романович
Сипачёв Алексей Романович - avatar