Präzision von Long Double beim Ausgeben mit std::cout



  • Ja, ich habe die anderen Beiträge zu dem Thema schon gelesen, mir konnte aber keiner weiterhelfen.

    Mein Problem ist, dass ich diese Zahl "besonders" angeben möchte, bis jetzt aber zu der Methode noch nichts gefunden habe.
    Bei diesem Code wird mein Vorhaben erklärt:

    #include <iostream>
    
    int main()
    {
        long double i = 34323546.3456431456;    // Ich möchte, dass 34323546.34564 ausgegeben wird
        long double i2 = 3;                     // Ich möchte, dass 3 ausgegeben wird;
    
        std::cout << i << std::endl;            // Ausgabe: 3.43235e+007
        std::cout << i2 << std::endl;           // Ausgabe: 3 i2 geht!
    
        std::cout.precision(5);
        std::cout.setf(std::ios::fixed);
        std::cout << i << std::endl;            // Ausgabe: 34323546.34564 i gelöst!
        std::cout << i2 << std::endl;           // Ausgabe: 3.00000 es soll aber 3 ausgegeben werden
        return 0;
    }
    

    Wie setze ich um, dass ich trotz der Präzision kein 3.00000 ausgegeben wird?
    MfG


  • Mod

    Folgende Änderungen:
    floatfield auf fixed zu setzen, bewirkt das Gegenteil von dem, was du möchtest, nämlich dass immer mindestens die vorgegebene Anzahl Nachkommastellen ausgegeben wird. Lass das floatfield daher so wie es standardmäßig ist, du möchtest schließlich weder scientific noch fixed. Oder wenn es anderswo verändert wurde, dann schalt es auf default_float, bzw. auf Aus, was beides das gleiche ist.

    Die precision von 5 ist bei obiger Änderung aber zu gering, denn nun ist mit der precision ja die Gesamtzahl der Stellen gemeint, nicht mehr die Nachkommastellen wie bei fixed. Die soll in deinem Beispiel aber 13 sein (wieso eigentlich 13? Mit 16 hättest du sämtliche relevanten Stellen!).

    Insgesamt also:

    std::cout.precision(13);
        std::cout << i << std::endl;           
        std::cout << i2 << std::endl;           
    
        // oder
        std::cout.precision(13);
        std::cout.unsetf (std::ios::floatfield);
        std::cout << i << std::endl;           
        std::cout << i2 << std::endl;
    

Anmelden zum Antworten