为什么浮动不起作用?

时间:2013-09-14 17:34:53

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

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

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

为什么它不起作用?

6 个答案:

答案 0 :(得分:8)

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

中没有任何区别

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

r = ((float)i) / j;

答案 1 :(得分:2)

更改

r = i / j;

r = i / (float) j;

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

答案 2 :(得分:2)

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

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

或者,您可以将i投射到该部门的float,如下所示:

r = ((float)i) / j;

答案 3 :(得分:0)

给两个整数带有一个整数(在你的情况下为2,后来转换为一个浮点数):

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

r = ((float) i) / j;

Working example

答案 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; //显式类型转换