【问题标题】:why float is not working?为什么浮动不起作用?
【发布时间】:2013-09-14 17:34:53
【问题描述】:

在我的代码中,输出是 2.000000 而它应该是 2.11111

#include<stdio.h>main(){
int i,j;
float r;
i = 19;
j = 9;
r = i / j;
printf(" %f ",r);}

为什么它不起作用?

【问题讨论】:

  • r = i / j; ==> r=(float)i/j;'

标签: c floating-point floating-point-conversion


【解决方案1】:

因为i / j 是整数除法(两个操作数都是整数)。将结果存储在 float 中没有任何区别。

如果ij 之一是浮点数,您将获得所需的结果,例如:

r = ((float)i) / j;

【讨论】:

    【解决方案2】:

    改变

    r = i / j;
    

    r = i / (float) j;
    

    ij 是整数,i / j 是整数除法。

    【讨论】:

      【解决方案3】:

      这是因为在分配给float 之前,除法是在整数中完成的。将 ij 的类型更改为 float 以修复它:

      main(){
          float i,j,r;
          i = 19;
          j = 9;
          r = i / j;
          printf(" %f ",r);
      }
      

      或者,您可以在分区中将i 转换为float,如下所示:

      r = ((float)i) / j;
      

      【讨论】:

        【解决方案4】:

        将两个整数替换为一个整数(在您的情况下 2 稍后将转换为浮点数):

        只需将 ij 转换为浮点数(或将它们声明为浮点数):

        r = ((float) i) / j;
        

        Working example

        【讨论】:

          【解决方案5】:

          这里,在计算 RHS(整数除法,其结果默认为商 = 整数)之后,默认情况下将 int 转换为浮点数。这就是您得到 2.000000 的原因。 在 RHS 中对任意数字进行类型转换以获得您想要的结果。

          看到您需要了解 c 中的类型转换,然后进行强制转换。在任何好的来源中检查它们。 通常,自动转换是可以将较窄的操作数转换为较宽的操作数而不会丢失信息的那些。例如,在浮点 + 整数(在 64 位机器上)等示例中将整数转换为浮点数。[来自 wiki]。

          例如 float x =7.8 ;诠释 k=9;整数 j = k + x = 16。

          这里先将 k 转换为浮点数,然后相加,最后将结果截断为整数。

          【讨论】:

            【解决方案6】:

            因为i / j 是整数除法(两个操作数都是整数),所以它们的除法结果是一个整数(忽略小数部分),它再次分配给一个浮点类型的变量r,所以编译器类型转换(即隐式类型转换)整数结果到float再次显示2.000000

            如果 i 和 j 之一是浮点数,你会得到想要的结果,例如:

            r = ((float)i) / j; //显式类型转换

            【讨论】:

              猜你喜欢
              • 2015-07-15
              • 1970-01-01
              • 2017-10-04
              • 1970-01-01
              • 2021-12-20
              • 2013-07-15
              • 1970-01-01
              • 2012-11-12
              • 1970-01-01
              相关资源
              最近更新 更多