自学C并发现当我为温度转换执行等式时,除非我将分数更改为小数,否则它将无效。即,
tempC=(.555*(tempF-32))
可以使用,但tempC=((5/9)*(tempF-32))
无效。
为什么?
根据C Primer Plus,它应该可以工作,因为我正在使用tempC和tempF的浮动。
答案 0 :(得分:17)
在第二种情况下看起来你有整数除法:
tempC=((5/9)*(tempF-32))
5 / 9
将被截断为零。
要解决此问题,您需要将其中一个设置为浮点类型:
tempC=((5./9.)*(tempF-32))
答案 1 :(得分:2)
当您执行5/9时,5和9都是整数,并且 整数除法 发生。整数除法的结果是整数,它是两个操作数的商。因此,在5/9的情况下,商是0,并且因为你乘以0,tempC变为0.为了不进行整数除法,两个操作数中的至少一个必须是float
。
E.g。如果您使用5.0 / 9或5 / 9.0或5.0 / 9.0,它将按预期工作。
答案 2 :(得分:2)
5/9是整数除法而不是浮点除法。这就是你得错的原因。
制作5或9个浮点变量,你会得到正确答案。
喜欢5.0 / 9 OR 5 / 9.0
答案 3 :(得分:1)
5/9
是一个整数表达式,因此它被截断为0.你的编译器应该警告你这一点,否则你应该考虑启用警告。
答案 4 :(得分:0)
如果你在括号中加上5/9,这将首先计算,因为它们是两个整数,它将通过整数除法完成,结果将为0,然后计算表达式的其余部分。
您可以重新排列表达式,以便首先转换为float:
tempC=((5/9)*(tempF-32));
→tempC=(5*(tempF-32))/9;
当然,正如其他人所说,使用浮点常数。