2

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

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

为什么它不工作?

4

6 回答 6

8

因为i / j是整数除法(两个操作数都是整数)。将结果存储在float.

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

r = ((float)i) / j;
于 2013-09-14T17:36:26.377 回答
2

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

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

或者,您可以在分区中转换为,如下所示ifloat

r = ((float)i) / j;
于 2013-09-14T17:36:44.143 回答
2

改变

r = i / j;

r = i / (float) j;

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

于 2013-09-14T17:36:29.497 回答
0

潜水两个整数野生一个整数(在你的情况下2,它后来被转换为一个浮点数):

只需转换ij浮动(或将它们声明为浮动开始):

r = ((float) i) / j;

工作示例

于 2013-09-14T17:36:56.330 回答
0

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

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

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

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

于 2013-09-14T17:56:50.340 回答
0

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

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

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

于 2013-09-14T18:49:40.240 回答