2013-01-21 258 views
3
int c; 
int f = 20; 
c = 5/9 * (f - 32); 
Console.WriteLine(c); 
Console.ReadLine(); 

如果我运行此代码c结束为0,这是错误的。谁能告诉我为什么?值不正确答案

回答

8

因为您的计算是在整型中完成的。我相信c是双重型变量。

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

使用32.032d所以操作数的一个是double,也在做同样为5/9

另外您需要将c定义为双倍。

+0

'5/9'仍然为零。 – Rawling

+0

@Rawling,在你评论之前编辑:D – Habib

+0

实际上,你正在将'Double'结果放到这里,并将其放入c中,该c被声明为'int'。截断将发生并且问题将会返回。 – Oren

3

问题出在下面一行;

5/9 

因为c和f是整数。例如,如果我要求你将11到10分;你会告诉我结果是1.1。假设你不知道浮点运算,那么你会说要么不可能将11到10;或者你会说它是1.运行时环境不变,它说它是0,因为你声明了一个整数。

+0

@lazyberezovsky你是正确的某一点;在这种情况下将f声明为整数。但不可能将c定义为int,将f定义为double。因此,如果两者都被声明为整数,即使f被移除,结果仍然是0。 – daryal

1

Habib已经解释了正在发生的事情。如果您不想将c更改为浮点型或双精度型,请执行以下操作:

c = (int)Math.Round(5.0/9.0 * (f - 32.0));