2013-01-21 147 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));