GCC划分截断(舍入问题)

时间:2011-04-08 12:33:54

标签: c gcc floating-point

在Ubuntu Linux 10.04上使用GCC,我在分割后进行了不必要的舍入。

我试过了:

#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以各种方式使用round函数,但是找不到我想要的东西。

非常感谢任何帮助。

祝你好运, 伯特

2 个答案:

答案 0 :(得分:9)

double reading = temp / 100.0;
                           ^^

temp / 100是整数除法 - 将结果赋值给double不会改变它。

答案 1 :(得分:3)

您正在使用整数除法,它总是给出积分结果而不是分数,然后将结果分配给double。除以100而不是100来获得您想要的行为。