2016-11-25 170 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

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