为什么除法结果为零而不是小数?

问题描述 投票:15回答:5

自学C并发现当我为温度转换进行等式时,除非我将分数更改为小数,否则它将无效。即

tempC=(.555*(tempF-32))将工作,但tempC=((5/9)*(tempF-32))将无法正常工作。

为什么? 根据C Primer Plus,它应该可以工作,因为我正在使用tempC和tempF的浮子。

c
5个回答
17
投票

看起来你在第二种情况下有整数除法:

tempC=((5/9)*(tempF-32))

5 / 9将被截断为零。

要解决这个问题,您需要将其中一个设置为浮点类型:

tempC=((5./9.)*(tempF-32))

2
投票

当你做5 / 9,5和9都是整数和整数除法发生。整数除法的结果是整数,它是两个操作数的商。因此,在5/9的情况下,商是0,并且因为你乘以0,tempC变为0.为了不进行整数除法,两个操作数中的至少一个必须是float

例如。如果您使用5.0 / 9或5 / 9.0或5.0 / 9.0,它将按预期工作。


2
投票

5/9是整数除法而不是浮点除法。这就是为什么你得到错误的结果。

制作5或9个浮点变量,您将得到正确的答案。

像5.0 / 9 OR 5 / 9.0


1
投票

5/9是一个整数表达式,因此它被截断为0.你的编译器应该警告你这一点,否则你应该考虑启用警告。


0
投票

如果将5/9放在括号中,则首先计算它,因为它们是两个整数,所以它将通过整数除法完成,结果将为0,然后计算表达式的其余部分。

您可以重新排列表达式,以便首先转换为float:

tempC=((5/9)*(tempF-32)); tempC=(5*(tempF-32))/9;

或者当然,正如其他人所说,使用浮点常数。

© www.soinside.com 2019 - 2024. All rights reserved.