2016-11-25 8 views
0

Hey Leute, ich habe einen Fehler, den ich nicht erkennen kann. Bitte hilf mir. In diesem Code möchte ich einen bestimmten Prozentsatz berechnen, sondern nach der Berechnung gibt es einen Nullwertspeicher in der Variablen „Prozentsatz“Variabler Prozentsatz mit Nullwert

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

, warum Sie mit 'int'? – user463035818

+0

Weil alle Variablen die Zahl ohne Dezimalzahl enthalten, verwende ich auch float mit der prozentualen Variablen, gebe aber immer noch den Wert null. –

+0

Wenn der Benutzer z. B. 100 eingibt, dann hat 100/1100 Dezimalstellen – user463035818

Antwort

2

Integer-Division schneidet in Richtung Null ab.

Bei

int total_marks, obtained_marks, percentage; 

und

percentage = (obtained_marks/total_marks) * 100; 

wenn obtained_marks weniger als total_marks, wird der Wert von (obtained_marks/total_marks) Null sein. In diesem Fall wird

percentage = (obtained_marks/total_marks) * 100; 

auch Null sein.

Selbst

percentage = (obtained_marks/total_marks) * 100.0; 

Null sein, da der Wert in der Klammer immer noch Null ist.

Eine bessere Möglichkeit wäre:

percentage = (100 * obtained_marks)/total_marks; 
0

erzielten Noten und Gesamtnote ganze Zahlen sind, so dass Sie Null bekommen, wenn Sie teilen. Ändern Sie Ihre Datentypen in Float oder Double.

+0

Könntest du das bitte erklären, ich habe meine Antwort aber kurz deine Zeile erklärt. –

+0

@ OsamaJutt Sie verwenden Ganzzahlmathematik, um eine Zahl kleiner als Null zu berechnen, die auf Null abgeschnitten wird. Zum Beispiel: 25/100 in Integer-Mathe ist .25 aber die Dezimalstellen sind gelöscht und Sie sind mit Null verlassen. Wenn Sie alle Ihre Datentypen in float oder double ändern, werden Sie diese Dezimalstellen nicht verlieren und Sie erhalten die Antwort, die Sie erwarten. – nicomp

+0

Ah, danke, dass du verstanden hast. –