Search code examples
cint

How to convert int to float in C?


I am trying to solve:

int total=0, number=0;
float percentage=0.0;

percentage=(number/total)*100;
printf("%.2f", percentage);

If the value of the number is 50 and the total is 100, I should get 50.00 as percentage and that is what I want. But I keep getting 0.00 as the answer and tried many changes to the types but they didn't work.


Solution

  • Integer division truncates, so (50/100) results in 0. You can cast to float (better double) or multiply with 100.0 (for double precision, 100.0f for float precision) first,

    double percentage;
    // ...
    percentage = 100.0*number/total;
    // percentage = (double)number/total * 100;
    

    or

    float percentage;
    // ...
    percentage = (float)number/total * 100;
    // percentage = 100.0f*number/total;
    

    Since floating point arithmetic is not associative, the results of 100.0*number/total and (double)number/total * 100 may be slightly different (the same holds for float), but it's extremely unlikely to influence the first two places after the decimal point, so it probably doesn't matter which way you choose.