# Why does my program only work on int numbers, not on float ones?

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

int main(void)
{
float change, quarter, dime, nickel, penny;
int coins;
do {
change = get_float("Change: ");
} while (change < 0);

quarter = 0.25;
dime = 0.10;
nickel = 0.05;
penny = 0.01;
coins = 0;

while (change != 0)
{
if((change-quarter) >= 0)
{
change = change - quarter;
coins += 1;
}
else if ((change - dime) >= 0)
{
change = change - dime;
coins += 1;
}
else if ((change - nickel) >= 0)
{
change = change - nickel;
coins += 1;
}
else if ((change - penny) >= 0)
{
change = change - penny;
coins += 1;
}
}
printf("%d", coins);
printf("\n");
}
``````

It works with numbers 1, 1.5, 2, 2.5 and some others which are nicely rounded, but as soon as i type another number like 0.41 it stops right there.

What is the issue?

To be exact, it works for multiples of `0.25`, because a floating point number always stores a multiple of a power of two. For `0.41`, there is no finite representation in that way, the exact binary representation would have an infinite number of digits. So after cutting the stream of binary digits off, the final value will be slightly lower or higher than the intended value, meaning it's unlikely you end up at zero.
So one way of dealing with this is changing from floating-point to fixed-point. Fixed-point means you use integers to store numbers with a given absolute precision. For storing a number with up to three digits after decimal point, you'd store `1000` times the number (and remember that value in memory means multiples of `0.001`). In our case here, that would be the factor `100`, representing the number of cents in the change. We would also have to multiply all the values we want to subtract, turning `0.01` into `1`. Kind of like percents work, the `%` symbol (not C's `%` operator) meaning hundredth.
BTW, if you switch to integer, you can use `/` and `%` operators to remove the loop. But most important to get it working.