# C program: storing rounded float to int variable

1. Jun 16, 2004

### Math Is Hard

Staff Emeritus
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. Jun 16, 2004

### chroot

Staff Emeritus
#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
3. Jun 16, 2004

### Math Is Hard

Staff Emeritus
Thanks, chroot!

4. Jun 17, 2004

### Math Is Hard

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

5. Jun 17, 2004

### Math Is Hard

Staff Emeritus
and the output is...

This is the unrounded bill: 35.677700
These are the total dollars: 35
These are the rounded total cents: 68