Falsche Zahldarstellung
-
Hallo also ich habe mir einen Umrechner programmiert das problem ist nur das die Kommazahl falsch dargestellt wird. zb 15000 Euro sind 2146520 Yen aber die Konsole spuckt dann 21465e+006 Yen. Als Datentyp habe ich double gewählt. Was hab ich falsch gemacht und wie korrigier ich das ??
-
siehe fixed versus scientific
-
Die Wahl von Fließkommazahlen für Geldbeträge ist allgemein sehr, sehr ungünstig. Auch wenn es nicht direkt mit deinem Problem zu tun hat, wirst du damit Probleme bekommen. Nimm einen Ganzzahltyp.
Deine Ausgabe ist durchaus korrekt, bloß die Darstellung ist standardmäßig eine andere, als du anscheinend denkst. Du kannst die Darstellung von Zahlen mit den format-Flags anpassen:
http://www.cplusplus.com/reference/ios/// modify floatfield #include <iostream> // std::cout, std::fixed, std::scientific int main () { double a = 3.1415926534; double b = 2006.0; double c = 1.0e-10; std::cout.precision(5); std::cout << "default:\n"; std::cout << a << '\n' << b << '\n' << c << '\n'; std::cout << '\n'; std::cout << "fixed:\n" << std::fixed; std::cout << a << '\n' << b << '\n' << c << '\n'; std::cout << '\n'; std::cout << "scientific:\n" << std::scientific; std::cout << a << '\n' << b << '\n' << c << '\n'; return 0; }
-
SeppJ schrieb:
Die Wahl von Fließkommazahlen für Geldbeträge ist allgemein sehr, sehr ungünstig. Auch wenn es nicht direkt mit deinem Problem zu tun hat, wirst du damit Probleme bekommen. Nimm einen Ganzzahltyp.
Deine Ausgabe ist durchaus korrekt, bloß die Darstellung ist standardmäßig eine andere, als du anscheinend denkst. Du kannst die Darstellung von Zahlen mit den format-Flags anpassen:
http://www.cplusplus.com/reference/ios/// modify floatfield #include <iostream> // std::cout, std::fixed, std::scientific int main () { double a = 3.1415926534; double b = 2006.0; double c = 1.0e-10; std::cout.precision(5); std::cout << "default:\n"; std::cout << a << '\n' << b << '\n' << c << '\n'; std::cout << '\n'; std::cout << "fixed:\n" << std::fixed; std::cout << a << '\n' << b << '\n' << c << '\n'; std::cout << '\n'; std::cout << "scientific:\n" << std::scientific; std::cout << a << '\n' << b << '\n' << c << '\n'; return 0; }
mit Flags meinste zb. << std::fixed; oder ?? Bin noch neu in dieser Materie
edit: wenn ich das so mache zeigt er mir komischerweise erst beim 2. durchlauf das richtige ergebnis an mit richtiger darstellung. kappier das nicht
-
Sebistyla24 schrieb:
edit: wenn ich das so mache zeigt er mir komischerweise erst beim 2. durchlauf das richtige ergebnis an mit richtiger darstellung. kappier das nicht
Wenn du was wie machst? Wir können nicht in deinen Kopf gucken.
-
wenn ich das so mache wie in dem Beispiel von dir mit std::fixed dann zeigt die konsole mir erst im 2. durchlauf die richtige darstellung an.
-
Sebistyla24 schrieb:
wenn ich das so mache wie in dem Beispiel von dir mit std::fixed dann zeigt die konsole mir erst im 2. durchlauf die richtige darstellung an.
Die Ausgabe von dem Beispiel soll
default: 3.1416 2006 1e-010 fixed: 3.14159 2006.00000 0.00000 scientific: 3.14159e+000 2.00600e+003 1.00000e-010
oder ähnlich sein. Ist das bei dir nicht so?
-
doch aber erst wenn das programm ein 2. mal durchläuft beim erstenmal noch nicht.
-
Ja dann zeig doch mal, was beim ersten Durchlauf angezeigt wird.
-
MFK schrieb:
Ja dann zeig doch mal, was beim ersten Durchlauf angezeigt wird.
1. Durchlauf 15000.0 EUR sind 21465e+006 JPY
2. Durchlauf 15000.0 EUR sind 2146500.000000 JPY
-
Und wie sieht der Code dazu aus?
-
#include "Funktion.h" double euro; double yen; double faktoryen = 143.10; double faktoreuro = 0.00699; double rechnenEuroYen() { cout << "Euro in Yen\n"; cout << "Bitte geben sie ihren Euro betrag ein (mit Komma (.) Bsp: 15000.0 EUR)\n"; cout << "Euro: "; cin >> euro; getchar(); cout << euro << " EUR sind umgerechnet " << euro * faktoryen << std::fixed << " JPY"; return euro; } double rechnenYenEuro() { cout << "Yen in Euro\n"; cout << "Bitte geben sie ihren Yen betrag ein (mit Komma (.) Bsp: 15000.0 JPY)\n"; cout << "Yen: "; cin >> yen; getchar(); cout << yen << " JPY sind umgerechnet " << yen * faktoreuro << std::fixed << " EUR"; return yen; }
-
So viel zu "so wie im Beispiel".
Du musst std::fixed vor dem Wert in den Stream stecken, nicht danach.
-
super vielen dank. bin noch anfänger.