开发者

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


double reading = temp / 100.0;
                           ^^

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


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜