Connecting Tech Pros Worldwide Forums | Help | Site Map

Formatting in C++

Brandon
Guest
 
Posts: n/a
#1: Jul 22 '05
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

David Hilsee
Guest
 
Posts: n/a
#2: Jul 22 '05

re: Formatting in C++


"Brandon" <bcr07548@creighton.edu> wrote in message
news:24f6b708.0407191909.3a723d00@posting.google.c om...[color=blue]
> 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)?[/color]

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[i] << 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[i] << 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
17976931348623180000000000000000000000000000000000 00000000000000000000000000
0000
00000000000000000000000000000000000000000000000000 00000000000000000000000000
0000
00000000000000000000000000000000000000000000000000 00000000000000000000000000
0000
00000000000000000000000000000000000000000000000000 0000000000000000000.00

--
David Hilsee


Siemel Naran
Guest
 
Posts: n/a
#3: Jul 22 '05

re: Formatting in C++


"Brandon" <bcr07548@creighton.edu> wrote in message
[color=blue]
> Is there any way to force a certain number of decimal places in C++
> using ios streams (ostringstreams in particular)?[/color]

You can use setprecision.

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


Alex Vinokur
Guest
 
Posts: n/a
#4: Jul 22 '05

re: Formatting in C++



"Brandon" <bcr07548@creighton.edu> wrote in message news:24f6b708.0407191909.3a723d00@posting.google.c om...[color=blue]
> 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[/color]

You might use also C-like printf format with C++ ostream; float format sample can be seen at
http://groups.google.com/groups?selm....uni-berlin.de.


--
Alex Vinokur
http://mathforum.org/library/view/10978.html
http://sourceforge.net/users/alexvn




Brian McGuinness
Guest
 
Posts: n/a
#5: Jul 22 '05

re: Formatting in C++


"Alex Vinokur" <alexvn@big-foot.com> wrote in message news:<2m3oknFiigorU1@uni-berlin.de>...[color=blue]
> You might use also C-like printf format with C++ ostream; float format sample can be seen at
> http://groups.google.com/groups?selm....uni-berlin.de.[/color]

Boost already has this:

http://www.boost.org/libs/format/index.html

Much more convenient than the standard cout manipulators.

--- Brian
Brandon
Guest
 
Posts: n/a
#6: Jul 22 '05

re: Formatting in C++


> I think you might be searching for std::setprecision() (<iomanip>) or[color=blue]
> std::ios_base::precision().[/color]

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

-Brandon
Closed Thread