2015-12-14 34 views
7

Ho un vecchio codice C sto cercando di replicare il comportamento in C++. Utilizza i modificatori printf: "% 06.02f".Corrispondenza printf Formattazione con iomanip

ho ingenuamente pensato che iomanip era altrettanto capace, e ha fatto:

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

Quando cerco di uscita il numero di test 123.456, printf rendimenti:

123,46

Ma cout rese:

1.2 + e02

C'è qualcosa che posso fare in iomanip di replicare questo, o devo tornare ad usare printf?

[Live Example]

+0

Prova a dare un'occhiata a boost :: format(). Supporta la sintassi del tipo printf() per iostreams ed è sicuro. –

+0

@JonTrauntvein Anche se apprezzo il suggerimento (soprattutto perché un sacco di cose in boost alla fine lo rendono nello standard) non includo boost laddove possibile. E qui sembra possibile non includerlo. –

risposta

2

I tre C identificatori di formato mappa corrispondente impostazione di formato in C++ iostreams:

  • %f ->std::ios_base::fixed (notazione punto fisso) normalmente impostata utilizzando out << std::fixed.
  • %e ->std::ios_base::scientific (notazione scientifica) tipicamente impostato utilizzando out << std::scientific.
  • %g -> l'impostazione predefinita, in genere impostata utilizzando out.setf(std::fmtflags(), std::ios_base::floatfield) o con C++ 11 e successive out << std::defaultfloat. La formattazione predefinita sta cercando di fornire il "migliore" degli altri formati assumendo una quantità fissa di cifre da utilizzare.

La precisione, la larghezza e il carattere di riempimento corrispondono al modo in cui hai già dichiarato.

4

Prova std::fixed:

std::cout << std::fixed; 

imposta il flag formato floatfield per il flusso di str a fisso.

Quando floatfield è impostato fixed, valori in virgola mobile vengono scritti con notazione a virgola fissa: il valore è rappresentato con esattamente tante cifre nella parte decimale come specificato dal campo precisione (precision) e senza parte esponente.

+0

Sì, capito, qual è il significato di risolto in questo contesto? –

+1

@JonathanMee Utilizza la notazione fissa. Ho aggiornato il post. – AlexD