在我的代码中,输出是 2.000000 而它应该是 2.11111
#include<stdio.h>main(){
int i,j;
float r;
i = 19;
j = 9;
r = i / j;
printf(" %f ",r);}
为什么它不工作?
在我的代码中,输出是 2.000000 而它应该是 2.11111
#include<stdio.h>main(){
int i,j;
float r;
i = 19;
j = 9;
r = i / j;
printf(" %f ",r);}
为什么它不工作?
因为i / j
是整数除法(两个操作数都是整数)。将结果存储在float
.
i
如果和之一j
是浮点数,您将获得所需的结果,例如:
r = ((float)i) / j;
这是因为在分配给 a 之前,除法是在整数中完成的float
。更改 和 的类型i
以j
修复float
它:
main(){
float i,j,r;
i = 19;
j = 9;
r = i / j;
printf(" %f ",r);
}
或者,您可以在分区中转换为,如下所示i
:float
r = ((float)i) / j;
改变
r = i / j;
和
r = i / (float) j;
i
j
是整数,是i / j
整数除法。
在这里,在计算 RHS(整数除法,其结果默认为商 = 整数)后,默认情况下将 int 转换为浮点数。这就是您得到 2.000000 的原因。在 RHS 中输入任何数字以获得您想要的结果。
看到您需要了解 c 中的类型转换,然后进行强制转换。在任何好的来源中检查它们。通常,自动转换是可以将较窄的操作数转换为较宽的操作数而不会丢失信息的那些。例如,在浮点 + 整数(在 64 位机器上)等示例中将整数转换为浮点数。[来自 wiki]。
例如浮点 x =7.8 ; 诠释 k=9;整数 j = k + x = 16 。
在这里,首先将 k 转换为浮点数,然后相加,最后将结果截断为整数。
因为i / j
是整数除法(两个操作数都是整数),所以它们的除法结果是一个整数(小数部分被忽略),它再次分配给一个浮点类型的变量r
,所以编译器将整数结果类型转换(即隐式类型转换)float
再次到显示 2.000000
如果 i 和 j 之一是浮点数,您将获得所需的结果,例如:
r = ((float)i) / j;
//显式类型转换