-1

我有一个简单的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);
}
4

5 回答 5

8
absolute_humidity returns an `int`

将签名更改为

float absolute_humidity(float temp);
于 2013-08-30T07:47:05.587 回答
4

您的函数absolute_humidity返回一个int. int为您投射to很聪明float,但这样做会截断 .4。

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

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

int main() {
    printf("%f", absolute_humidity(20.0));
}
于 2013-08-30T07:47:05.137 回答
3

因为函数absolute_humidity返回int.

将其更改为 returnfloat将有输出:353.4

于 2013-08-30T07:47:27.937 回答
2

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

更改absolute_humidity()为:

// Not returning int
float absolute_humidity(float temp)
{
    float abs_hum = (17.67 * temp);
    return abs_hum;
}
于 2013-08-30T07:47:41.460 回答
2

应该,

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

abs_num 结果被强制转换为整数,因为您返回的是 int。

于 2013-08-30T07:47:44.810 回答