2011-09-29 16 views
7
double d = 1/2.; 
printf("%.2lf\n", d); 

Stampa 0.50. Questo è ciò che voglio replicare usando manipolatori ostream. Tuttavia, nessuno degli ovvi manipoli iomanip mi consente di impostare le posizioni decimali minime necessarie (se ho capito correttamente, setprecision imposta la larghezza massima). C'è un modo puro iostream o boost per farlo?equivalente ostream di% .2f o% .2lf

risposta

3

Utilizzare setprecision in combinazione con fixed.

In base alla sezione 22.4.2.2.2 della norma, le specifiche di precisione sugli iostreams hanno esattamente lo stesso effetto che hanno per printf. E fixed fornisce esattamente lo stesso comportamento di printf%f.

+0

Puoi fornire un link? –

+0

@FooBah: vedere http://stackoverflow.com/questions/81656/where-do-i-find-the-current-c-or-c-standard-documents –

10

È possibile utilizzare std::fixed e std::setprecision dall'intestazione iomanip:

#include <iostream> 
#include <iomanip> 
int main(void) { 
    double d = 1/2.; 
    std::cout << std::fixed << std::setprecision(2) << d << std::endl; 
    return 0; 
} 

Questo fornisce in uscita 0.50 lo desideri.

1
+2

Wow, è come cercare di uccidere una zanzara con un testata termo-nucleare :-) – paxdiablo

+0

@paxdiable: No, risolve un problema reale. 'printf' non è sicuro per il tipo (e funziona con una manciata di tipi), con la formattazione dei flussi dolorosa (e in alcuni casi è assolutamente necessario poter usare una stringa di formato). – visitor

Problemi correlati