quadmore
quadmore

Reputation: 69

GCC division truncates (rounding problem)

Using GCC on the Ubuntu Linux 10.04, I have unwanted rounding after a division.

I tried:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void FormatReading(int temp)
{
    double reading = temp / 100;
    printf("%f\n",reading);  /* displays 226.000000, was expecting 226.60 */
}

int main(void)
{
    FormatReading(22660);
    return 0;
}

It was suggested to me to try:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void FormatReading(int temp)
{
    long reading = temp ;
    reading = reading / 100;
    printf("%3.2ld\n",reading);  /* displays 226 */
}

int main(void)
{
    FormatReading(22660);
    return 0;
}

I also tried:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void FormatReading(int temp)
{
    long reading = temp ;
    double reading2 = reading / 100;
    printf("%3.2f\n",reading2);  /* displays 226.00 */
}

int main(void)
{
    FormatReading(22660);
    return 0;
}

I also tried the round function using include math.h with compiler tag -lm in various ways, but did not find what I was looking for.

Any help greatly appreciated.

Best regards, Bert

Upvotes: 0

Views: 917

Answers (2)

Erik
Erik

Reputation: 91270

double reading = temp / 100.0;
                           ^^

temp / 100 is an integer division - that you assign the result to a double doesn't change this.

Upvotes: 9

I82Much
I82Much

Reputation: 27326

You are using integer division which always gives integral results rather than fractions, and then the result is being assigned to a double. Divide by 100.0 instead of 100 to get the behavior you want.

Upvotes: 3

Related Questions