2011-11-30 131 views
3

有人可以告訴我爲什麼變量百分比= 0?應該是33.3333吧? (2/6)有人能告訴我爲什麼我的分數總是計算爲零?

因爲當我運行下面的功能,則其結果是

總線= 6
奇數行= 2個
百分比奇數行= 0

bool count_odd_lines(string a, string b) 
{ 
    ifstream in; 
    ofstream out; 
    in.open(a.c_str()); 
    out.open(b.c_str()); 
    string s; 
    int count = 0; 
    int odd = 0; 
    if (in && out) 
    { 
     while (getline(in, s)) 
     { 
      count++; 
      if (s.length() % 2 != 0) odd++; 
     } 
     out << "Total lines = " << count << endl; 
     out << "Odd lines = " << odd << endl; 
     double percent = odd/count; 
     out << "Percent odd lines = " << setprecision(4) << percent <<endl; 
     return true; 
    } 
    else return false; 
    in.close(); 
    out.close(); 
} 

回答

10

有兩個問題:

  1. 兩者oddcount是整數,所以odd/count執行整數(即,截斷)分裂。
  2. 要獲得百分比(即33.33而不是0.3333),您需要將結果乘以100

可以解決這兩個問題,像這樣:

double percent = odd * 100.0/count; 

乘法做縮放並且還開啓了隨後的劃分​​浮點之一。

+1

請不要建議type()轉換爲newbie。讓他習慣於static_cast。 –

+0

+1考慮到每*分*需要一個*分* - 部分地方:) –

10

問題是你在做整數除法。變化:

double percent = odd/count; 

double percent = static_cast<double>(odd)/count; 
+0

令人敬畏的菜鳥錯誤,我們都做到了!這實際上仍然是我計算錯誤時尋找的第一件事情之一=) – AzP

3

整數的除法總是導致一個整數; countodd都是整數,所以odd/count給出了低於實際值的最大整數。

嘗試double percent = static_cast<double>(odd)/count;強制浮點除法。

1
double percent = odd/count; 

是錯誤的。它在之前分配。將所有變量轉換爲浮動。

1

當你做odd/count當兩者都是整數時,它做整數除法。您需要將其中的一個作爲浮點除法的雙精度。

(double)odd/count 
1

因爲countodd和均爲整數,計算odd/count是基於整數爲好。宣佈countodd爲雙打,你很好去。

相關問題