2012-11-28 60 views
1

以下fhr_1的值計算爲0.0 爲什麼fhr_1不是0.3?司不返回雙重

 double fhr_1; 
     int n_fhr_1 = 9; 
     int n_fhr_0 = 15; 
     int n_fhr_2 = 6; 

     fhr_1 = n_fhr_1/(n_fhr_1 + n_fhr_0 + n_fhr_2); 
+3

是否有一個很好的理由,爲什麼你的變量是這樣命名的?除此之外,他們沒有使用lowerCamelCase。 –

+1

對您的問題的更一般的回答:表達式的類型不依賴於其結果被分配到的變量的類型。在評估賦值的右側時,編譯器不會查看左側,因此'fhr_1'是double的事實對於對'n_fhr_1 /(n_fhr_1 + n_fhr_0 + n_fhr_2)'的評估沒有影響。 – phoog

回答

7

您至少需要一個double類型的操作數。否則,你會得到整數結果(整數除法會發生)

fhr_1 = (double)n_fhr_1/(n_fhr_1 + n_fhr_0 + n_fhr_2); 

或者

fhr_1 = n_fhr_1/(double)(n_fhr_1 + n_fhr_0 + n_fhr_2); 

或者

fhr_1 = n_fhr_1/((double)n_fhr_1 + n_fhr_0 + n_fhr_2); 

你可以閱讀更多有關劃分規則上msdn

+2

我喜歡你是第一個發帖,還有3個更多的答案基本上說同樣的事情。 –

+0

@尼克我傾向於同意這種說法。但是當幾秒鐘後發佈其他答案時,我們可以認爲它們不是簡單的原始答案的複製/粘貼。 – Guillaume

+0

如果是這種情況,請從我的聲明中排除這些答案。 –

5
double fhr_1; 
     int n_fhr_1 = 9; 
     int n_fhr_0 = 15; 
     int n_fhr_2 = 6; 

     fhr_1 = (double)n_fhr_1/(n_fhr_1 + n_fhr_0 + n_fhr_2); 

您必須將其中一個操作數加倍,這樣它會將其計算爲double。

2

你不能簡單地分開整數,你會得到0因爲四捨五入。 嘗試改爲:

fhr_1 = ((double)(n_fhr_1))/(n_fhr_1 + n_fhr_0 + n_fhr_2);