Rounding off floats with ostringstream
15,481
Solution 1
You need to set the precision for ostringstream using precision
e.g
stream.precision(3);
stream<<fixed; // for fixed point notation
//cout.precision(3); // display only
stream << t;
cout<<stream.str();
Solution 2
If you want a particular number of significant figures displayed try using setprecision(n) where n is the number of significant figures you want.
#include <iomanip>
void doSomething(float t)
{
ostringstream stream;
stream << std::setprecision(4) << t;
cout << stream.str();
}
Solution 3
If you want fixed-point instead of scientific notation, use std::fixed
:
stream << std::fixed << t;
Additionally you might want to set the precision as mentioned.
Author by
boom
XML, C, C++, Cocoa, Gtk, Gtkmm, Gnome, zlib, libxml, Berkelium, OpenCV
Updated on July 28, 2022Comments
-
boom over 1 year
I have an issue regarding conversion from float to c++ string using ostringstream. Here is my line:
void doSomething(float t) { ostringstream stream; stream << t; cout << stream.str(); }
when t has value -0.89999 it is round off to -0.9, but when it's value is 0.0999 or lesser than this say 1.754e-7, it just prints without round off. what can be the solution for this.
-
boom over 13 yearsi got solution for 0.0999, but for the number of 7.9e-08 i am still getting the same. so what can be the solution for this.
-
boom over 13 yearsi got solution for 0.0999, but for the number of 7.9e-08 i am still getting the same. so what can be the solution for this.
-
yadab over 13 yearsyou need to set precision to the stream itself. i.e. stream.precision(3);
-
boom over 13 yearsi am doing the same. here is my code:ostringstream stream; stream.precision(1); stream << t; cout << endl<<"Value:"<< stream.str();
-
yadab over 13 yearsokay, use a fixed precision. e.g, stream.precision(8); stream << fixed; stream << t; cout << endl<<"Value:"<< stream.str();
-
stephanmg about 4 yearsWhat is the default precision for ostringstream?