Formatting in C++

B

Brandon

In a program, I'm using an ostringstream to convert a floating point
value to a string. When the numbers are big enough, they are
converted using scientific notation. To fix this, I changed the code
to
oStream << fixed << myFloat;
but now there are an unnecessary amount of trailing zeros that I don't
want. I seem to recall something in C, using printf(), where you
could specify how many places you wanted. For examples, using
something like printf("%1.2", 0.45678) would print the text "0.45".
Is there any way to force a certain number of decimal places in C++
using ios streams (ostringstreams in particular)?

-Brandon
 
D

David Hilsee

Brandon said:
In a program, I'm using an ostringstream to convert a floating point
value to a string. When the numbers are big enough, they are
converted using scientific notation. To fix this, I changed the code
to
oStream << fixed << myFloat;
but now there are an unnecessary amount of trailing zeros that I don't
want. I seem to recall something in C, using printf(), where you
could specify how many places you wanted. For examples, using
something like printf("%1.2", 0.45678) would print the text "0.45".
Is there any way to force a certain number of decimal places in C++
using ios streams (ostringstreams in particular)?

I think you might be searching for std::setprecision() (<iomanip>) or
std::ios_base::precision().

int main() {
double testData[] = {0.00000001, 1.0, 20.0, 1000000000000000.0,
std::numeric_limits<double>::max()};
int numElems = sizeof(testData)/sizeof(testData[0]);
for ( int i = 0; i < numElems; ++i ) {
std::cout << testData << std::endl;
}

std::cout << std::fixed << std::setprecision(2);
std::cout << "After modifying stream:" << std::endl;
for ( int i = 0; i < numElems; ++i ) {
std::cout << testData << std::endl;
}

return 0;
}

Output (Win2K, VC++. Net 2003):
1e-008
1
20
1e+015
1.79769e+308
After modifying stream:
0.00
1.00
20.00
1000000000000000.00
1797693134862318000000000000000000000000000000000000000000000000000000000000
0000
0000000000000000000000000000000000000000000000000000000000000000000000000000
0000
0000000000000000000000000000000000000000000000000000000000000000000000000000
0000
000000000000000000000000000000000000000000000000000000000000000000000.00
 
S

Siemel Naran

Brandon said:
Is there any way to force a certain number of decimal places in C++
using ios streams (ostringstreams in particular)?

You can use setprecision.

ostringstream o;
o << setprecision(2);
o << 1.2345;
o << 6.7890;
 
A

Alex Vinokur

Brandon said:
In a program, I'm using an ostringstream to convert a floating point
value to a string. When the numbers are big enough, they are
converted using scientific notation. To fix this, I changed the code
to
oStream << fixed << myFloat;
but now there are an unnecessary amount of trailing zeros that I don't
want. I seem to recall something in C, using printf(), where you
could specify how many places you wanted. For examples, using
something like printf("%1.2", 0.45678) would print the text "0.45".
Is there any way to force a certain number of decimal places in C++
using ios streams (ostringstreams in particular)?

-Brandon

You might use also C-like printf format with C++ ostream; float format sample can be seen at
http://groups.google.com/[email protected].
 
B

Brandon

I think you might be searching for std::setprecision() ( said:
std::ios_base::precision().

Yeah, that was it. I haven't had much use for stream formatting
lately and forgot about it. Thanks for the help.

-Brandon
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,901
Latest member
Noble71S45

Latest Threads

Top