Kleiner Fehler in meinem kurzen C-Code. Warum?

Ich kann nicht herausfinden, warum dies für 90% der Eingänge funktioniert, aber nicht für die anderen. Es soll Ihnen sagen, wie viele Münzen Sie als Wechselgeld zurückerhalten würden. Die meisten Testbeträge funktionieren einwandfrei, aber wenn Sie 4,20 (oder 4,20 USD) eingeben, werden 23 Münzen zurückgegeben ... es sollten 18 Münzen (16 Viertel und 2 Nickel) sein. Wo ist der Bug? Hier ist mein Code:

#include <stdio.h>
#include <cs50.h>

int main(void){

    float change = 0.00;

    printf("How much change is owed? ");
    change = GetFloat();

    float quarters = change/.25;
    change-= (int)quarters*.25;

    float dimes = change/.10;
    change-= (int)dimes*.10;

    float nickels = change/.05;
    change-= (int)nickels*.05;

    float pennies = (change+.005)/.01;
    change-=(int)pennies*.01;

    int total = (int)quarters+(int)dimes+(int)nickels+(int)pennies;

    printf("%d\n", total);

    return 0;
    }

Antworten auf die Frage(3)

Ihre Antwort auf die Frage