C program: storing rounded float to int variable

Click For Summary
The discussion focuses on converting a float value representing a total bill into two integer variables: one for dollars and one for rounded cents. The challenge lies in correctly rounding the cents from the float value, especially when dealing with values like 12.378. A solution involves using the `ceil()` function from the `math.h` library to ensure proper rounding of the cents after isolating the decimal portion. The final code demonstrates how to extract and round the cents while storing the dollar amount as an integer. The output confirms the successful conversion and rounding of the total bill.
Math Is Hard
Staff Emeritus
Science Advisor
Gold Member
Messages
4,650
Reaction score
39
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!
 
Physics news on Phys.org
#include <stdlib.h> and use the round() function:

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

- Warren
 
Last edited by a moderator:
Thanks, chroot!
 
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;
}
 
and the output is...

This is the unrounded bill: 35.677700
These are the total dollars: 35
These are the rounded total cents: 68
 
The book claims the answer is that all the magnitudes are the same because "the gravitational force on the penguin is the same". I'm having trouble understanding this. I thought the buoyant force was equal to the weight of the fluid displaced. Weight depends on mass which depends on density. Therefore, due to the differing densities the buoyant force will be different in each case? Is this incorrect?

Similar threads

  • · Replies 10 ·
Replies
10
Views
2K
Replies
5
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
Replies
5
Views
5K
  • · Replies 11 ·
Replies
11
Views
3K
  • · Replies 23 ·
Replies
23
Views
3K
  • Sticky
  • · Replies 1 ·
Replies
1
Views
16K
  • · Replies 4 ·
Replies
4
Views
5K