2015-12-14 15 views
7

Ich habe einige alte C-Code Ich versuche, das Verhalten von in C++ zu replizieren. Es verwendet die printf Modifikatoren: "% 06.02f".Passende printf Formatierung mit iomanip

ich naiv gedacht, dass iomanip genauso in der Lage war, und tat

cout << setfill('0') << setw(6) << setprecision(2) 

Wenn ich versuche, die Testnummer 123.456, printf Ausbeuten Ausgabe:

123,46

Aber cout ergibt:

1.2 + e02

Gibt es etwas, was ich in iomanip dies zu replizieren tun können, oder muss ich wieder printf zu verwenden?

[Live Example]

+0

Werfen Sie einen Blick auf boost :: format(). Es unterstützt die Syntax printf() type für iostreams und ist typsicher. –

+0

@JonTrauntvein Während ich den Tipp zu schätzen weiß (vor allem, weil Tonnen von Boost-Stößen schließlich in den Standard übergehen), schließe ich den Boost möglichst nicht mit ein. Und hier scheint es möglich, es nicht einzuschließen. –

Antwort

2

Die drei C Formatbezeichkartenformateinstellung in C++ iostreams zu entsprechen:

  • %f ->std::ios_base::fixed (Festkommaschreibweise) typischerweise eingestellt out << std::fixed verwenden.
  • 10 ->std::ios_base::scientific (wissenschaftliche Notation) in der Regel mit out << std::scientific festgelegt.
  • %g -> die Standardeinstellung, in der Regel mit out.setf(std::fmtflags(), std::ios_base::floatfield) oder mit C++ 11 und später out << std::defaultfloat festgelegt. Die Standardformatierung versucht, das "Beste" der anderen Formate zu erhalten, wobei eine feste Anzahl von zu verwendenden Ziffern vorausgesetzt wird.

Die Genauigkeit, die Breite und das Füllzeichen stimmen mit der von Ihnen angegebenen Form überein.

4

Versuchen std::fixed:

std::cout << std::fixed; 

Legt die floatfield Format-Flag für den str Strom festgelegt.

Wenn floatfield zu fixed gesetzt ist, Gleitkommawerte geschrieben wird unter Verwendung von Festkommaschreibweise: der Wert wird in dem Dezimalteil mit genau so vielen Ziffern dargestellt, wie durch das Präzisionsfeld spezifizierte (precision) und mit keinem Exponententeil.

+0

Yup, das hat es, was bedeutet Fixed in diesem Zusammenhang? –

+1

@ JonathanMee Es verwendet feste Notation. Ich habe den Beitrag aktualisiert. – AlexD