Formatierte Ausgabe von Floats in Spalten



  • Halööchen. Ich hab eine klines Problem mit der formatierten Ausgabe von größeren Floats (bzw double). Ich möchte, dass meine Ausgabe folgendermaßen Aussieht:

    2451936.45    13.4
    2451936.48    13.6
    2451937       10.7
    

    usw.
    Das Problem ist folgendes: Erstens schreibt C++ so große Zahlen von sich aus in wissenschaftlicher Notation, ich krieg also sowas wie

    2.45194e+06   13.4
    

    etc.

    Wenn ich das aber explizit mit den Ausgabemodifikatoren ändere, füllt er mir alles dank setw() mit Nullen auf (setw() brauche ich, um die Spalten korrekt zu haben):

    2451936.45000 13.4
    

    Wie mach ichs richtig??

    Momewntan sieht mein Code folgendermaßen aus (Ausgabe in wissenschaftlicher Notation)

    cout <<  setw(13) << left << noshowpoint << setfill(' ') << it->first << it->second << endl;
    

    Die Ausgabe ist dementsprechend

    2.45199e+06  13.4
    2.45199e+06  13.9
    2.452e+06    14
    2.452e+06    13
    2.452e+06    13.7
    2.45201e+06  14.1
    2.45201e+06  13.5
    


  • Reicht dir der fixed-Manipulator?

    Argh.. nicht zuende gelesen. Hmm da muss man wohl noch mit precision rumspielen. Im Josuttis ist da auf jeden Fall ein längeres Beispiel zu, falls du den zur Hand hast.



  • Da fehlt noch ein fixed bei den Manipulatoren, um die wissenschaftliche Darstellung auszuschalten.



  • ähm - wie schon oben geschrieben, füllt ers mir dann mit nullen auf...

    cout <<  fixed << setw(13) << left << noshowpoint << setfill(' ') << it->first << it->second << endl;
    

    führt zu

    2451927.70000012.000000
    2451929.80000012.100000
    2451943.81670012.700000
    2451956.62400012.600000
    2451959.20000012.700000
    2451962.60000013.500000
    2451964.80000013.200000
    2451971.60000013.600000
    2451987.90000013.400000
    2451989.50000013.900000
    

    und sry, den Josuttis hab ich nicht zur Hand...



  • Habe es gerade mal nachgeschlagen - also was du willst, geht anscheinend nur, wenn weder fixed noch scientifc gesetzt ist. In diesem Falle verhält sich die Dezimaldarstellung so wie du willst. Allerdings wird nur in Dezimalschreibweise dargestellt, wenn die Zahl auch precision() Stellen darstellbar ist. Der Schlüssel für dich sollte also sein, die precision entsprechend hoch zu setzen - auf 13 oder 16 oder so.



  • Ah, das klingt natürlich einleuchtend...

    ... und funktioniert blendend:

    cout <<  setprecision(13) << setw(13) << left << it->first << it->second << endl;
    

    liefert

    2451927.7    12
    2451929.8    12.1
    2451943.8167 12.7
    2451956.624  12.6
    2451959.2    12.7
    2451962.6    13.5
    

    wie beabsichtigt..
    Danke


Anmelden zum Antworten