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 ??




  • Mod

    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


  • Mod

    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.


  • Mod

    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.


Log in to reply