Notenberechnung: Prozentzahl Runden - HILFE!!!
-
Die Nachkommastellen werden direkt bei der Berechnung abgeschnitten, wenn du zwei Ganzzahlen (int und Kollegen) dividierst. Und im Zweifelsfalls wird die Zahl spätestens dann gerundet, wenn du ihn in eine int-Variable zurückschreibst. Um mit Gleitkommazahlen zu arbeiten, mußt du deinen Variablen einen anderen Typ geben:
double prozent;
-
Achsoooo ^^
ich war die ganze Zeit auf int festgefahren, weil ich dachte es wäre die einzige Möglichkeit Variablen einzubinden o.0 nun wäre dieses Problem endlich gelöst
nun wäre nur noch gut zu wissen wie ich dem Programm sagen kann, dass es zwar mit diesen Gleitkommazahlen arbeiten, jedoch nur Ganze Zahlen Ausgeben soll..
-
Du kannst dem Ausgabestream sagen, wie genau er die Zahlen ausgeben kann per
cout.precision(1);
(Darstellung mit einer Stelle nach dem Komma).
-
OK, damit hast du mir sehr geholfen!
Vielen Dank für die Kompetente und schnelle Beratung und noch eine angenehme Nacht wünsche ich
-
http://www.c-plusplus.net/forum/39342
Shade Of Mine schrieb:
int d2i(double d) { return d<0?d-.5:d+.5; }
std::cout << (int)double_variable;
ginge auch noch.
-
Danke FreakY<3Cpp!
Das erste Zitat von dir habe ich zwar nicht im Geringsten verstanden, aber das zweite hat prima funktioniert
Es ist sehr gut, dass du noch gepostet hast, denn CStoll's Methode wollte nicht Funktionieren, da Visual C++ dafür eine integer Variable forderte und ich habe ja vorher alle Variablen extra auf double umgeschrieben, damit die Nachkommastellen überhaupt berechnet werden ^^P.S.: Den selben Beitrag habe ich mir vorher schonmal angesehen nur da bin ich überhaupt nicht draus schlau geworden
Danke nochmal an alle!
MfG Chris
-
FreakY<3Cpp schrieb:
http://www.c-plusplus.net/forum/39342
Shade Of Mine schrieb:
int d2i(double d) { return d<0?d-.5:d+.5; }
std::cout << (int)double_variable;
ginge auch noch.
Wenn er C++ programmiert, dann wäre
static_cast< int >( doubleVariable )
besser angebracht, als die alten C-Casts.
Lg freeG
-
Immer so eine Sache der Notwendigkeit meiner Ansicht nach. In .NET gibt es auch für fast jeden Kram ein Convert.To(), trotzdem kann man auch mal bei solchen Datentypen einen normalen Cast benutzen. Zumindest meine Meinung...
-
FreakY<3Cpp schrieb:
Immer so eine Sache der Notwendigkeit meiner Ansicht nach. In .NET gibt es auch für fast jeden Kram ein Convert.To(), trotzdem kann man auch mal bei solchen Datentypen einen normalen Cast benutzen. Zumindest meine Meinung...
Du vergleichst Äpfel mit Birnen. Die casts in .net Sprachen machen mehr, als nur den Typen zurechtzubiegen. C-casts machen das nicht und sollten möglichst nicht benutzt werden.
-
pr0pag4nda:
Das erste Beispiel hebelt einfach den Effekt aus, dass eine Konversion zu int immer die Nachkommastellen abschneidet. Ist die Zahl positiv, so wird eben 0,5 hinzuaddiert, sodass z.B. 12,5 zu 13,0 wird und damit alle Zahlen, die eigentlich aufgerundet werden müssten, ab sofort einfach in den Abrundungsbereich der nachfolgenden Zahl konvertiert werden -> korrektes Rundungsverhalten.Ist die Zahl kleiner, ist das natürlich andersrum. -0,6 muss ja zu -1 gerundet werden. Wenn man 0,5 hinzufügt, wird das aber auf 0 gerundet. Also zieht man 0,5 ab, ist bei -1,1 und die Rundung ist wieder korrekt.