价值没有得到正确答案

3
int c;
int f = 20;
c = 5 / 9 * (f - 32);
Console.WriteLine(c);
Console.ReadLine();

如果我运行这段代码,c的结果是0,这是错误的。有人可以告诉我为什么吗?
3个回答

8

因为您的计算正在使用整数类型。我相信c是双精度类型变量。

c = 5d / 9 * (f - 32.0);

使用 32.032d 以使其中一个操作数为 double,对于 5/9 也同样如此。

另外,你需要将 c 定义为 double 类型。


5 / 9 仍然会是零。 - Rawling
实际上,您正在将此处的Double结果放入已声明为int的c中。将会发生截断并且问题将返回。 - Oren
@Oren,是的,谢谢你指出来,我在问题中忽略了这一点,并假设C被定义为双精度。 - Habib

3
问题出在下面这行代码:
5 / 9

因为 c 和 f 是整数。 例如,如果我让你把 11 除以 10;你会告诉我结果是 1.1。假设你不知道浮点数算术,那么你会说要么不能把 11 除以 10;要么你会说它是 1。运行环境也一样,它会说结果是 0,因为你声明了一个整数。

@ lazyberezovsky,你的说法在某种程度上是正确的;将f声明为整数会导致这种情况发生。但是不可能将c定义为int类型,而将f定义为double类型。因此,如果两者都被声明为整数,即使去除f,结果仍将是0。 - daryal

1
Habib已经解释了正在发生的事情。如果您不想将c更改为浮点数或双精度浮点数,您可以采取以下措施:
c = (int)Math.Round(5.0 / 9.0 * (f - 32.0));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接