Я хочу создать небольшую систему, которая возвращает мне оптимизированное количество векселей и монет для любой стоимости.Получите количество векселей и монет за любое значение
Вот мой код время:
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
double amount = Double.parseDouble(br.readLine());
if (amount > 0 && amount < 1000000.00) {
// ############################# BILLS ############################
double rest100 = amount/100;
double rest50 = amount % 100;
double rest20 = rest50 % 50;
double rest10 = rest20 % 20;
double rest5 = rest10 % 10;
double rest2 = rest5 % 5;
// ############################ COINS ############################
double rest01 = rest2 % 2;
double rest050 = rest01 % 1;
double rest025 = rest050 % .5;
double rest010 = rest025 % 25;
double rest005 = rest010 % .1;
double rest001 = rest005 % .05;
System.out.println("BILLS:\n"
+ (int) rest100
+ " bill(s) of 100.00\n"
+ (int) rest50/50
+ " bill(s) of 50.00\n"
+ (int) rest20/20
+ " bill(s) of 20.00\n"
+ (int) rest10/10
+ " bill(s) of 10.00\n"
+ (int) rest5/5
+ " bill(s) of 5.00\n"
+ (int) rest2/2
+ " bill(s) of 2.00\n"
+ "COINS:\n"
+ (int) (rest01/1)
+ " coin(s) of 1.00\n"
+ (int) (rest050/.5)
+ " coin(s) of 0.50\n"
+ (int) (rest025/.25)
+ " coin(s) of 0.25\n"
+ (int) (rest010/.1)
+ " coin(s) of 0.10\n"
+ (int) (rest005/.05)
+ " coin(s) of 0.05\n"
+ (int) (rest001/.01)
+ " coin(s) of 0.01");
}
}
Ну, это почти правильно, счета работают идеально, моя проблема с монетами.
Вот некоторые входы:
- 576,73 // Печать правильно
- 8,45 // Печать неправильно
- 9,45 // Печать неправильно, смотрите ниже:
Фактический выход:
BILLS:
0 bill(s) of 100.00
0 bill(s) of 50.00
0 bill(s) of 20.00
0 bill(s) of 10.00
1 bill(s) of 5.00
2 bill(s) of 2.00
COINS:
0 coin(s) of 1.00
0 coin(s) of 0.50
1 coin(s) of 0.25
4 coin(s) of 0.10
0 coin(s) of 0.05
4 coin(s) of 0.01
Expec Ted выход:
BILLS:
0 bill(s) of 100.00
0 bill(s) of 50.00
0 bill(s) of 20.00
0 bill(s) of 10.00
1 bill(s) of 5.00
2 bill(s) of 2.00
COINS:
0 coin(s) of 1.00
0 coin(s) of 0.50
1 coin(s) of 0.25
2 coin(s) of 0.10
0 coin(s) of 0.05
0 coin(s) of 0.01
PS: Я не буду размещать все ожидаемые результаты, так как это позволит вопрос больше, чем сейчас, но если вам нужно, я могу отправить. Заранее спасибо.
Я подозреваю, что проблема заключается в 0,1, 0,05, и 0,01, поскольку они не могут быть точно представлены в виде числа с плавающей точкой. Рассмотрите возможность использования целого для этой задачи, поскольку целые операции являются точными и быстрыми. –
Вы используете math.floor (rest100):? И почему у вас есть 50-процентная монета? – kpie
@kpie действительно ни за что .. ошибка, но это не имеет значения (к сожалению). В моей стране существует монета достоинством 50 центов. – developer033