【问题标题】:printf - Wrong answer on a floating point number [duplicate]printf - 浮点数的错误答案[重复]
【发布时间】:2014-09-16 18:21:51
【问题描述】:

我正在尝试将两个数字相除并打印答案,但编译器始终给出 1.000000 作为答案,我尝试更改文字但答案仍然相同。

这是我的代码:

#include <stdio.h>
int main()
{
float a = 20 / 12;
printf ("%f", a);
}

任何想法为什么会发生这种情况以及如何获得正确答案?

【问题讨论】:

  • 因为你做了整数除法。
  • 你需要了解隐式和显式类型转换。只有这样,您才会明白为什么会发生这种情况。试着做 20/12.0 看看有什么不同
  • 20/12 = 1 和 8/12... 在 C 20/12 中是 1,并且 20 % 12 = 8

标签: c floating-point printf


【解决方案1】:

改变

float a = 20 / 12;

float a = 20 / 12.f;

20 / 12 是整数除法。

【讨论】:

    【解决方案2】:

    将值中的至少一个类型转换为float 类型。

    float a=(float)20/12;
    

    【讨论】:

      【解决方案3】:

      如果我改变,你正在执行整数除法

      float a = 20 / 12;
      

      float a = (float) 20 / 12;
      

      我明白了

      1.666667
      

      【讨论】:

        【解决方案4】:

        你正在做的是整数除法,即

        float a = 20/12 ----- gives you the integer quotient.
        

        为了得到一个浮点商,你可以这样做

        float a = 20/12.0;    
        or
        float a = 20.0/12;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-14
          相关资源
          最近更新 更多