为什么使用浮点数后5/2的结果仍然是'2'?

4

我输入了以下代码(没有编译问题或其他问题):

float y = 5/2;
printf("%f\n", y);

输出结果只是:2.00000 我的数学没错吧?或者我对 / 运算符理解有误?它表示除法,5/2 应该等于 2.5 吧?
非常感谢您的帮助!

4
因为结果是“float”,但运算数和运算本身都是整数。 - Eugene Sh.
3个回答

8
5是一个int类型,2也是int类型。因此,5/2将使用整数除法。如果您将5替换为5.0f(或将2替换为2.0f),使其中一个int变成float,则会得到浮点除法并获得期望的2.5。您还可以通过显式转换分子或分母(例如((float) 5) / 2)来实现相同的效果。

1
5. or 2. will do. - alk
4
@alk: 我只是喜欢把0放在那里——它们没有实际用途,但由于我的视力下降,我经常会错过单独的“.”,但我还没有错过一个“.0”。 - R_Kapp
2
我建议使用.00,因为你很可能有两只眼睛。;-) - alk
1
@alk 谢谢你们两个!:D - Alex Lord

3

为什么我使用浮点数,5/2的结果却是'2'?

因为你没有使用float”。5/2是一个整数除法。只有它的结果(2)会被隐式转换为float,成为2.(注意小数点)。


0
你应该进行适当的类型转换。
float y = (float) 5/2 

程序将把数字视为 int 类型。
它将两个 int 相除,并将结果写入 float。因此,答案是 2.0。

您必须进行类型转换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接