Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Homework Help: C program: storing rounded float to int variable

  1. Jun 16, 2004 #1

    Math Is Hard

    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    I've been frustrated for a couple of days over a C programming assignment:

    "Convert the float value tot_bill (in dollars and cents) to integer dollars in tot_doll and integer cents in tot_cents. Make sure that the cents value is rounded, not truncated."

    I am assuming that we should take a value like 12.37 cents and store the values in two integer variables. The tot_doll value should contain the value 12. That's easy enough to do - conversion to an integer will take care of that.
    The tot_cents should contain a value of 37. That's not so bad unless instead of 12.37, I have a value of 12.378.

    How do I get the rounded value from a float (.378) into an integer variable so I can store 38 for the integer tot_cents?

    I thought about storing 378 as an integer value and then using a conversion modifier to convert on the fly to a value of 38 when I print, but I don't know if that's what's expected (or if it's even possible).

    I am probably making this a lot harder than it is.

    Thanks!!
     
  2. jcsd
  3. Jun 16, 2004 #2

    chroot

    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    #include <stdlib.h> and use the round() function:

    http://www.sciface.com/STATIC/DOC30/eng/stdlib_round.html [Broken]

    - Warren
     
    Last edited by a moderator: May 1, 2017
  4. Jun 16, 2004 #3

    Math Is Hard

    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    Thanks, chroot!
     
  5. Jun 17, 2004 #4

    Math Is Hard

    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    here's what I ended up doing

    I'm sure it could have been done in less steps I think but this seemed to get the job done. I am not quite sure how the rounding function differs between math.h and stdlib.h or if they are essentially the same. My teacher had suggested using math.h for rounding, so I gave that a try.

    #include <stdio.h>
    #include <math.h>

    int main(void)
    {
    float tot_bill = 35.6777;
    int tot_doll = tot_bill;
    // just stores the dollars as integer value - truncates
    float leftover = (tot_bill - tot_doll)*100;
    //gets cents leftover, moves decimal place 2 to right
    int tot_cents = ceil(leftover);
    //rounds up the xx.xxx decimal made in last step
    //to next closest integer, stores as int.

    printf("This is the unrounded bill: %f \n", tot_bill);
    printf("These are the total dollars: %d \n", tot_doll);
    printf("These are the rounded total cents: %d \n", tot_cents);

    return 0;
    }
     
  6. Jun 17, 2004 #5

    Math Is Hard

    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    and the output is...

    This is the unrounded bill: 35.677700
    These are the total dollars: 35
    These are the rounded total cents: 68
     
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook