Я пытаюсь создать код, который рассчитывает минимальное количество монет, необходимое для предоставления пользователю правильного изменения.
Код, который я написал, почти верен, но количество монет всегда немного меньше. Я предполагаю, что это связано с неточностью чисел с увеличением десятичных знаков.
Есть ли в любом случае ограничить число с плавающей запятой до 2 десятичных знаков?
Например:
Если я введу 5, то получится 19 * 25 центов, 2 * 10 центов, 0 * 5 центов и 4 * 1 центов.
Но правильная сумма должна быть 20 - 0 - 0 - 0 соответственно.
#include <stdio.h>
#include <cs50.h>
//Assume that the only coins available are quarters (25¢), dimes (10¢), nickels (5¢), and pennies (1¢)
int main(){
float change;
float newTotal;
int coin25 = 0;
int coin10 = 0;
int coin5 = 0;
int coin1 = 0;
do{
change = get_float("How much change is owed: $ ");
}
while (change <= 0);
for (float i = 0.25; i < change; i += 0.25){
coin25 += 1;
}
newTotal = change - (coin25 * 0.25);
for (float j = 0.1; j < newTotal; j += 0.1){
coin10 += 1;
}
newTotal = newTotal - (coin10 * 0.1);
for (float k = 0.05; k < newTotal; k += 0.05){
coin5 += 1;
}
newTotal = newTotal - (coin5 * 0.05);
for (float l = 0.01; l < newTotal; l += 0.01){
coin1 += 1;
}
newTotal = newTotal - (coin1 * 0.01);
//int coins = coin25 + coin10 + coin5 + coin1;
//printf("%i\n", coins);
printf("%i\n", coin25);
printf("%i\n", coin10);
printf("%i\n", coin5);
printf("%i\n", coin1);
}