【问题标题】:Why is printf rounding off?为什么 printf 四舍五入?
【发布时间】:2013-08-30 07:45:57
【问题描述】:
我有一个简单的 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);
}
【问题讨论】:
标签:
c
floating-point
printf
【解决方案1】:
absolute_humidity returns an `int`
将签名更改为
float absolute_humidity(float temp);
【解决方案2】:
您的函数absolute_humidity 返回一个int。为您将 int 转换为 float 足够聪明,但这样做会截断 .4。
将返回类型更改为float,一切都应该没问题:
float absolute_humidity(float temp) {
return 17.67 * temp;
}
int main() {
printf("%f", absolute_humidity(20.0));
}
【解决方案3】:
因为函数absolute_humidity返回int。
将其更改为返回 float 将有输出:353.4
【解决方案4】:
您将计算转换为int,因此会丢失精度。
将absolute_humidity() 更改为:
// Not returning int
float absolute_humidity(float temp)
{
float abs_hum = (17.67 * temp);
return abs_hum;
}
【解决方案5】:
应该是,
float absolute_humidity(float temp)
{
float abs_hum = (17.67 * temp);
return abs_hum;
}
abs_num 结果被强制转换为整数,因为您返回的是 int。