setw in Kombination mit setprecision



  • Hallo,

    ich habe Schwierigkeiten mit einer formatierten Ausgabe von Fließkommazahlen. Gibt zwar ein Haufen Beispiele im Internet, nur machen die nicht, was ich möchte.

    Ich möchte folgende Ausgabe erreichen:
    3 doubles in einer Zeile,
    3 Stellen vorkomma rechts ausgerichtet + 3 Stellen nachkomma ausgefüllt mit '0', falls weniger Stellen vorhanden.

    Ich könnte jetzt ca 100 Zeilen Code reinstellen, die Kombinationsversuche welche obiges erreichen sollen aber nicht machen, aber ich hoffe dies wäre nicht hilfreich. Danke.



  • Du meinst so

      3.457
    123.400
    123.457
      0.000
    

    ?

    Dann

    double d;
    cout << setw(7) << fixed << setprecision(3) << d;
    

    (s. a. Ideone-Code)



  • Du hast es nicht nur erfasst, sondern mich auch erlöst 😊

    Danke schön.



  • Was fehlte dir denn bei deinen Versuchen? Das fixed?



  • Kann ich jetzt eigentlich nicht mehr nachvollziehen. Wahrscheinlich das Verhältnis der Werte von setw() und setprecision(). Jedenfalls kam kein einziger meiner Versuche auch nur in die Nähe dieser Formatierung.



  • Aber jetzt verstehst du die Zahlenwerte?



  • Ich denke schon.

    Wenn im obigen Fall setprecision( np = 3 ) ist, muss setw( n = np +4 ) sein, damit man 3 vorkomma + vorzeichen und 3 nachkomma bekommt?



  • Ja, genau: die (Mindest-)Breite bei setw ist inklusive des Dezimaltrennzeichens und setprecision gibt die Anzahl der Nachkommastellen an. Und fixed oder scientific muß man explizit setzen, da none die Voreinstellung ist (dort bezieht sich dann setprecision auf die Anzahl aller dargestellten Ziffern, also Vor- und Nachkommastellen - wahrscheinlich hat dich das dann bei deinen Versuchen verwirrt), s.a. fixed.



  • Joh, da waren dann wohl mehrere Unklarheiten meinerseits. Danke nochmal für die genauere Erläuterung.


Log in to reply