Penso che il tuo problema è che precision()
imposta la precisione utilizzato nelle future operazioni di inserimento flusso , non quando si genera la stringa finale da presentare. Cioè, scrivendo
ta << a;
tb << b;
tc << c;
ta.precision(2);
tb.precision(2);
tc.precision(2);
Stai impostando precision
troppo tardi, come le prime tre righe hanno già convertito i numeri in virgola mobile in stringhe utilizzando la precisione di default.
Per risolvere questo problema, provare a cambiare l'ordine in cui si esegue queste dichiarazioni a
ta.precision(2);
tb.precision(2);
tc.precision(2);
ta << a;
tb << b;
tc << c;
Questo farà sì che le scrive sulle stringstream
di utilizzare il vostro precisione personalizzato piuttosto che le impostazioni predefinite esistenti.
Tuttavia, l'effetto del modificatore è significativo solo se si specifica esplicitamente al flusso che si desidera utilizzare la notazione a precisione fissa o scientifica per l'output. Per fare questo, è possibile utilizzare sia le fixed
o scientific
modificatori:
ta.precision(2);
tb.precision(2);
tc.precision(2);
ta << fixed << a;
tb << fixed << b;
tc << fixed << c;
Ciò visualizzerà correttamente il numero appropriato di cifre.
Su una nota correlata, non è necessario utilizzare tre stringstream
s per raggiungere l'obiettivo. Si può semplicemente usare uno:
std::stringstream t;
t.precision(2);
t << fixed << a << '\n' << b << '\n << c << '\n';
std::string out = t.str();
grazie, ma non funziona. Sto ancora ottenendo '3.0' anziché' 3.00' – noobcpp
@ noobcpp- Whoops! Errore mio. Ho appena aggiornato ciò per menzionare che è necessario utilizzare la modalità 'fixed' o' scientific' sulle stringhe. Prova a fare quel cambiamento e vedi se risolve le cose. – templatetypedef
+1. @noobcpp: Inoltre, controlla: http://www.cplusplus.com/reference/iostream/ios_base/precision/ (anche se dicono di usare 0 in un posto che mi sta dando un errore del compilatore). –