2010-09-20 9 views
7

Ich habe ein Problem bezüglich der Konvertierung von Float zu C++ - String mit ostringstream. Hier ist meine Linie:Abgerundete Floats mit ostringstream

void doSomething(float t) 
{ 
    ostringstream stream; 
    stream << t; 
    cout << stream.str(); 
} 

wenn t Wert hat -,89999 es runden bis -0,9 ist, aber wenn es Wert ist, ist 0,0999 oder weniger als diese sagen 1.754e-7, druckt es nur ohne Runde. Was kann die Lösung dafür sein?

+0

Warum übergeben Sie den Float nicht direkt an 'cout'? –

+0

@In silico, eigentlich möchte ich diesen Wert irgendwann in meinem Code verwenden. – boom

+0

@In silico, was Sie eigentlich sagen, funktioniert nicht. – boom

Antwort

14

Sie müssen die Präzision für Ostringstream setzen mit precision

zB

stream.precision(3); 
stream<<fixed; // for fixed point notation 
//cout.precision(3); // display only 
stream << t; 

cout<<stream.str(); 
+0

Ich habe eine Lösung für 0,0999, aber für die Zahl von 7,9e-08 bekomme ich immer noch das gleiche. Was kann die Lösung dafür sein? – boom

+0

müssen Sie die Präzision für den Stream selbst einstellen. d.h. Strom.präzision (3); – yadab

+0

Ich mache das gleiche. Hier ist mein Code: ostringstream stream; \t \t \t Strom.präzision (1); \t \t \t Strom << t; \t \t \t cout << endl << "Wert:" << stream.str(); – boom

6

Wenn Sie eine bestimmte Anzahl signifikanter Zahlen anzeigen möchten, verwenden Sie setprecision (n), wobei n die Anzahl der gewünschten signifikanten Zahlen ist.

#include <iomanip> 

void doSomething(float t) 
{ 
    ostringstream stream; 
    stream << std::setprecision(4) << t; 
    cout << stream.str(); 
} 
+1

Warum sollten Sie die Genauigkeit einstellen, wenn Sie eine Zeichenfolge an "cout" senden ...? –

+0

shuttle87, reparierte ich was ich für einen offensichtlichen Fehler hielt. Ich hoffe, es macht dir nichts aus. – sbi

0

Verwendung setprecision:

stream << setprecision(5) <<t ; 

nun die Zeichenfolge stream.str() wird von der erforderlichen Genauigkeit sein .

+0

Ich habe eine Lösung für 0,0999, aber für die Zahl von 7,9e-08 bekomme ich immer noch das gleiche. Was kann die Lösung dafür sein? – boom

2

Wenn Sie Festkomma wollen, anstatt wissenschaftliche Schreibweise verwenden std::fixed:

stream << std::fixed << t; 

Zusätzlich sollten Sie die Präzision einstellen, wie erwähnt.