C ++在同一行上进行除法,乘法和加法的问题

时间:2015-07-05 18:11:18

标签: c++

这是在C ++中,我的程序将Celsius转换为Fahrenheit时出现问题。

我遇到问题的一条线是我的转换公式线:

fahrenheitTemp = (9 / 5) * celsiusTemp + 32

当我用1.8代替9 / 5时,等式/程序工作正常但由于某种原因,9 / 5永远不会乘以celsiusTemp。它始终只返回celsiusTemp + 32的值。

程序的其余部分很好,只是9 / 5没有做任何事情,我甚至尝试了所有不同类型的组合括号等。

2 个答案:

答案 0 :(得分:8)

您的问题在于您使用整数除法而不是浮点除法。这个表达式:

9 / 5

评估为:

1

因为它会丢弃0.8个剩余部分。如果要使用浮点除法,则需要确保一个或两个操作数都是浮点类型:

fahrenheitTemp = (9.0 / 5.0) * celsiusTemp + 32;

如果farenheitTempint,您还需要在之后转回int

fahrenheitTemp = static_cast<int>((9.0 / 5.0) * celsiusTemp + 32);

答案 1 :(得分:2)

默认情况下,像5(9.0/5.0)这样的整个值将被解释为整数,没有小数部分。有几种方法可以解决这个问题:

  1. ((double)9/5)暗示这是一个浮动值
  2. import java.io.*; interface MyIOAction { void ioAction(Reader rdr) throws IOException; } class MyClass { public static void main(String args[]) throws IOException { Reader rdr1; int read = rdr1.read(); //Statement 1 MyIOAction myIO = (rdr2) -> { int ch = rdr2.read(); //Statement 2 }; } } 将9作为双重投射并将5推广为相同。
  3. 祝你好运!