visual c++ double Wert wird abgerundet

BLR

Erfahrenes Mitglied
Hallo zusammen, ich muss einen prozentualen Wert berechnen.
Ich gehe ganz simpel vor:

C++:
double procent(0.0);
procent = (100 * 6026) / 151160;

Eigentlich kommt da 3,9865...usw raus.
Ich sehe allerdings bei mir: 3,0
Wie kommt das? Rundet er automatisch ab??
Wie kann ich das beheben?
Danke für jeden Tipp.
 
Hi
Code:
(100 * 6026) / 151160;
da sind nirgends Kommastellen, also sind das vorerst int´s, und Rechnungen wo nur ints dabei sind
ergeben wieder ein int. Erst das fertige Ergebnis 3 wird zu double umgewandelt, damit es in die Variable kann.
Entweder die Werte zu double casten oder einfach Kommastellen dazuschreiben:
Code:
(100.0 * 6026.0) / 151160.0;
(wobei eigentlich nur eine Kommazahl auch reicht).
 
Danke für die Info, habs gemacht und es funktioniert.
Aber spätestens wenn ich durch 151160 teile, ergibt es eine Kommazahl. Wieso wurde sie dennoch als 3,000000000 angezeigt?
 
Hallo BLR,
was sheel gemeint hat ist, dass die Zeile
Code:
double percent = (100 * 6026) / 151160;
eine gecastete Integer-Berechnung ist. Dein Compiler führt also die Berechnung mit Ganzzahlen aus, und wandelt sie danach in eine Gleitkommazahl um.
Berechnet wird also zuerst 100 * 6026 = 602600, und danach wird die Division ausgeführt 602600 / 151160 = 3.9865... und es werden die Nachkommastellen abgeschnitten, damit das Ergebnis eine Ganzzahl ist: int(3.9865...) = 3. Erst dann wird zu double gecastet, also werden wieder Nachkommastellen "angehängt" (halt lauter Nullen).
Schreibst du stattdessen sowas hier
Code:
double percent = (100.0 * 6026) / 151160;
enthält die Rechnung bereits Nachkommastellen. Deshalb wird von von Anfang an mit Nachkommastellen gerechnet (die Werte werden also zuerst gecastet, dann wird berechnet). Das läuft dann etwa so ab:
(100.0 * 6026) / 151160
= (100.0 * 6026.0) / 151160.0
= 602600.0 / 151160.0 = 3.9865...
Hierbei schneidet er also keine Nachkommastellen ab (außer natürlich ganz hinten wegen der endlichen Genauigkeit).

Gruß Technipion
 
Zurück