2016-11-25 198 views
0

嘿傢伙我有一個我無法檢測到的錯誤。請幫助我。在這段代碼我想計算百分比,但在計算之後有一個零值存儲在變量「百分比」顯示零值的變量百分比

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    int total_marks, obtained_marks, percentage; 
    total_marks = 1100; 
    cout << "enters yours obtained marks"<<endl; 
    cin >> obtained_marks; 
    percentage = (obtained_marks/total_marks) * 100; 
    cout << "yours percentage =" << percentage; 
    if (percentage >= 60) 
    { 
     cout << "you have passed with first division"; 
    } 
    cout << "yours pecentage is=" << percentage; 
    system("pause"); 
    return 0; 
} 
+3

爲什麼你使用'int'? – user463035818

+0

因爲所有的變量都包含沒有小數的數字,所以我也用百分比變量的浮點數,但仍然給零值。 –

+0

如果用戶輸入例如100,那麼100/1100有小數位 – user463035818

回答

2

整數除法向零截斷。

鑑於

int total_marks, obtained_marks, percentage; 

percentage = (obtained_marks/total_marks) * 100; 

如果obtained_marks小於total_marks,的(obtained_marks/total_marks)值將是零。在這種情況下,

percentage = (obtained_marks/total_marks) * 100; 

也將爲零。

即使

percentage = (obtained_marks/total_marks) * 100.0; 

將是零,因爲在括號內的值仍然是零。

一種更好的方式是:

percentage = (100 * obtained_marks)/total_marks; 
0

獲得商標和商標總量是整數,所以你越來越零,當你劃分。將您的數據類型更改爲float或double。

+0

能否請你解釋一下,我得到了我的答案,但簡要解釋了你的路線。 –

+0

@OsamaJutt您正在使用整數數學計算一個小於零的數字,該數字將被截斷爲零。例如:整數數學中的25/100是.25,但小數位將被刪除,並且您剩下零。如果您將所有數據類型更改爲浮點數或雙精度浮點數,則不會丟失這些小數位數,您將得到您所期望的答案。 – nicomp

+0

啊謝謝你明白了你的意思。 –