Probleme mit Nachkommastellen bei float
-
Hi @all!
Ich habe folgenden Code. Das Problem: Der der Grundstückspreis wird immer nur ohne Nachkommastellen ausgegeben.
Kann mir da jemand helfen? Danke!#include <iostream> using namespace std; // Variablen deklarieren und inizialisieren int laenge = 0; int breite = 0; int qm = 0; float preis = 0; float g_preis = 0; // Programmstart int main() { // Eingabe der Länge do { cout << "Bitte geben Sie die Laenge des Grundstuecks in ganzen Metern ein: "; cin >> laenge; } while (laenge == 0); cout << "Danke." << endl; // Eingabe der Breite do { cout << "Bitte geben Sie die Breite des Grundstuecks in ganzen Metern ein: "; cin >> breite; } while(breite == 0); cout << "Danke." << endl; // Eingabe des Preises pro Quadratmeter do { cout << "Bitte geben Sie den Preis pro Quadratmeter in Euro und Cent ein: "; cin >> preis; } while (preis == 0.0); // Berechnung der Grundstückpreises qm = laenge * breite; g_preis = static_cast<float>(qm) * preis; // Ausgabe des Grundstückpreises cout << "Das Grundstueck hat eine Groesse von " << qm << "qm." << endl; cout << "Die Kosten belaufen sich auf " << g_preis << "Euro." << endl; // Programm Ende return 0; }Grüße
Ralph Hoffmann
-
Wieso sollte man für eine diskrete Größe wie Geld einen pseudo-kontinuierlichen und ungenauen Datentyp wie float benutzen? Der für deine Zwecke richtige Datentyp heißt int, die Einheit Cent.
Edit: Aber allgemein kannst du die Zahl der Nachkommastellen bei der Ausgabe mit dem IO-Manipulator setprecision() und dem fixed-Flag steuern.
-
Danke für die schnelle Antwort....warum ich das so mache? Weil die Übungsaufgabe so gestellt wurde

Ich stehe mit meinen C++ Kenntnissen ganz am Anfang. Die Aufgabe gibt vor, die Länge und Breite eines Grundstücks in Ganzzahlen eingeben zu können. Beim Preis pro Quadratmeter und dem Grundstückspreis sollen die Nachkommastellen Berücksichtigung finden.
Ich schätze es soll der Umgang mit static_cast geprüft werden.
Was bitte ist: IO-Manipulator setprecision() und der fixed-Flag

Grüße
Ralph HoffmannEDIT: Jetzt funktioniert es....ich weiß nicht warum...aber das kommt vielleicht noch....

-
Die Standardausgabe bei Fließkommazahlen (float, double) sollte 6 Nachkommastellen umfassen.
Ich tippe darauf, daß du ein Komma anstatt eines Punktes beim Preis eingegeben hast - C++ kennt standardmäßig nur die (amerikanisch-)englische Ein- und Ausgabe:3.14Edit: 3x "Komma" falsch geschrieben...
-
Ralph Hoffmann schrieb:
Danke für die schnelle Antwort....warum ich das so mache? Weil die Übungsaufgabe so gestellt wurde

Ich stehe mit meinen C++ Kenntnissen ganz am Anfang. Die Aufgabe gibt vor, die Länge und Breite eines Grundstücks in Ganzzahlen eingeben zu können. Beim Preis pro Quadratmeter und dem Grundstückspreis sollen die Nachkommastellen Berücksichtigung finden.
Ich schätze es soll der Umgang mit static_cast geprüft werden.
Was bitte ist: IO-Manipulator setprecision() und der fixed-Flag

Grüße
Ralph HoffmannEDIT: Jetzt funktioniert es....ich weiß nicht warum...aber das kommt vielleicht noch....

Genau die werden berücksichtigst, wenn du in Cents rechnest. Es ergibt 0 Sinn, float oder double für Geld zu benutzen, denn wenn's ums Geld geht, will man exakt sein, float ist nicht exakt. Ich würde es auch nicht tun, wenn es nicht explizit in der Aufgabe steht, float zu benutzen. Nachkommastellen kannst du auch ausgeben, wenn du die Cents in der Ausgabe in Euro und float darstellst (und da dein geschätztes static_cast machst), nicht aber schon während der Rechnung, wo Rundungsfehler etc. auftreten.
Wie man setprecision benutzt kannst du Google fragen. Es gibt genug Codebeispiele.
-
Jodocus schrieb:
Wie man setprecision benutzt kannst du Google fragen. Es gibt genug Codebeispiele.
.. man kann es Ralph aber auch einfach zeigen wie es geht:
Ändere Zeile 50 nach
cout << "Die Kosten belaufen sich auf " << fixed << setprecision(2) << g_preis << "Euro." << endl;und inkludiere zusätzlich '
#include <iomanip>'.siehe dazu http://www.cplusplus.com/reference/iomanip/setprecision/ und http://www.cplusplus.com/reference/ios/fixed/.