为什么除法的结果是零而不是十进制

  • 本文关键字:十进制 结果是 除法 c
  • 更新时间 :
  • 英文 :


自学C,发现当我为临时转换做一个方程时,除非我把分数改成十进制,否则它不会起作用。即

tempC=(.555*(tempF-32))会工作,但tempC=((5/9)*(tempF-32))不会工作。

为什么
根据这本书";C Primer Plus";它应该像我对tempC和tempF都使用浮点一样工作。

在第二种情况下,似乎有整数除法:

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

5 / 9将被截断为零。

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

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

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

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

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

设5或9个浮点变量,你就会得到正确的答案。

类似5.0/9或5/9.0

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

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

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

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

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

相关内容

最新更新