Усечения деления GCC (проблема округления) - PullRequest
0 голосов
/ 08 апреля 2011

Используя GCC в Ubuntu Linux 10.04, у меня возникает нежелательное округление после деления.

Я пытался:

#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;
}

Мне предложили попробовать:

#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;
}

Я тоже пробовал:

#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;
}

Я также пробовал использовать функцию округления, используя include math.h с тегом компилятора -lm, но не нашел того, что искал.

Любая помощь с благодарностью.

С уважением, Bert

Ответы [ 2 ]

9 голосов
/ 08 апреля 2011
double reading = temp / 100.0;
                           ^^

temp / 100 - целочисленное деление - то, что вы присваиваете результат двойному, не меняет этого.

3 голосов
/ 08 апреля 2011

Вы используете целочисленное деление, которое всегда дает целые результаты, а не дроби, а затем результат присваивается двойному.Разделите на 100,0 вместо 100, чтобы получить поведение, которое вы хотите.

...