在我的代码中,输出为2.000000,而它应该是2.11111
#include<stdio.h>main(){
int i,j;
float r;
i = 19;
j = 9;
r = i / j;
printf(" %f ",r);}
为什么它不起作用?
答案 0 :(得分:8)
因为i / j
是整数除法(两个操作数都是整数)。将结果存储在float
。
如果i
和j
中的一个是浮点数,您将获得所需的结果,例如:
r = ((float)i) / j;
答案 1 :(得分:2)
更改
r = i / j;
带
r = i / (float) j;
i
和j
是整数,i / j
是整数除法。
答案 2 :(得分:2)
这是因为除法在分配给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;
答案 3 :(得分:0)
答案 4 :(得分:0)
这里,在RHS(整数除法,其结果默认为商=整数)被评估之后,默认情况下int被转换为float。这就是为什么你得到2.000000。 在RHS中使用任何数字来获取您所寻求的结果。
看到你需要了解c中的类型转换然后再进行转换。在任何好的来源中检查它们。 通常,自动转换是那些可以将较窄的操作数转换为较宽的操作数而不会丢失信息的转换。例如,在一个例子中将整数转换为浮点数,例如float + integer(在64位机器上)。[来自wiki]。
例如float x = 7.8; int k = 9; int j = k + x = 16。
这里,第一个k被隐式浮动,然后被添加,最后结果被截断为整数。
答案 5 :(得分:0)
因为i / j
是整数除法(两个操作数都是整数),所以它们的除法产生一个整数(小数部分被删除),它再次被赋值给浮点类型的变量r
所以编译器类型转换(ieimplicit类型转换)整数结果再次显示float
以显示2.000000
如果i和j中的一个是浮点数,你会得到所需的结果,例如:
r = ((float)i) / j;
//显式类型转换