为什么printf四舍五入?

时间:2013-08-30 07:45:58

标签: c floating-point printf

我有一个简单的 C 程序(在树莓派上编译)应该计算17.67 * 20(即353.4) 下面的程序打印出353. printf是否将其四舍五入?我尝试过“%g”和“%.1f

#include <stdio.h>
#include <math.h>

int absolute_humidity(float temp)
{
    float abs_hum = (17.67 * temp);
    return abs_hum;
}

int main()
{
    float abshum = absolute_humidity(20.0);
    printf("%g",abshum);
}

5 个答案:

答案 0 :(得分:8)

absolute_humidity returns an `int`

将签名更改为

float absolute_humidity(float temp);

答案 1 :(得分:4)

您的函数absolute_humidity会返回int。聪明地将int强制转换为float,但这样做会截断.4。

将返回类型更改为float,一切都应该没问题:

float absolute_humidity(float temp) {
    return 17.67 * temp;
}

int main() {
    printf("%f", absolute_humidity(20.0));
}

答案 2 :(得分:3)

因为函数absolute_humidity返回int

将其更改为返回float会输出:353.4

答案 3 :(得分:2)

您正在将计算转换为int,从而失去精确度。

absolute_humidity()更改为:

// Not returning int
float absolute_humidity(float temp)
{
    float abs_hum = (17.67 * temp);
    return abs_hum;
}

答案 4 :(得分:2)

应该是,

float absolute_humidity(float temp)
{
    float abs_hum = (17.67 * temp);
    return abs_hum;
}

abs_num结果被强制转换为整数,因为你返回了一个int。