Небольшая ошибка в моем коротком C-коде. Зачем?

Я могу'Не могу понять, почему это работает для 90% входов, но не для других. Он предназначен для того, чтобы рассказать вам, сколько монет вы получите в обмен. Большинство тестовых сумм работают нормально, но если вы введете 4,20 (или 4,20 долл. США), он вернет 23 монеты ... это должно быть 18 монет (16 кварталов и 2 никеля). Где ошибка? Вот мой код:

#include 
#include 

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;
    }

Ответы на вопрос(3)

Ваш ответ на вопрос