为什么整数除法的结果是零而不是小数? [重复]

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

自学 C 语言,发现当我做一个临时转换方程时,除非我将分数改为小数,否则它不会起作用。即,

tempC=(.555*(tempF-32))
可以工作,但
tempC=((5/9)*(tempF-32))
不起作用。

为什么?
根据“C Primer Plus”一书,它应该可以工作,因为我对 tempC 和 tempF 使用浮点数。

c math integer division integer-division
5个回答
19
投票

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

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

5 / 9
将被截断为零。

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

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

3
投票

当你做 5/9 时,5 和 9 都是整数,并且会发生 整数除法。整数除法的结果是一个整数,它是两个操作数的商。因此,5/9 的商为 0,并且由于乘以 0,tempC 结果为 0。为了不进行整数除法,两个操作数中至少有一个必须是

float

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


3
投票

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

设置 5 或 9 个浮点变量,您将得到正确答案。

如 5.0/9 或 5/9.0


1
投票

5/9
是一个整数表达式,因此它会被截断为 0。您的编译器应该对此发出警告,否则您应该考虑启用警告。


0
投票

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

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

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

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

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