【问题标题】: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);
}

【问题讨论】:

  • 为什么你的函数返回一个int?

标签: 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。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-05-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-02
            相关资源
            最近更新 更多