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.7usw.
Das Problem ist folgendes: Erstens schreibt C++ so große Zahlen von sich aus in wissenschaftlicher Notation, ich krieg also sowas wie2.45194e+06 13.4etc.
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.4Wie 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.900000und 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.5wie beabsichtigt..
Danke