I have some old C code I'm trying to replicate the behavior of in C++. It uses the printf
modifiers: "%06.02f".
I naively thought that iomanip
was just as capable, and did:
cout << setfill('0') << setw(6) << setprecision(2)
When I try to output the test number 123.456, printf
yields:
123.46
But cout
yields:
1.2+e02
Is there anything I can do in iomanip
to replicate this, or must I go back to using printf
?
[ Live Example ]
Try std::fixed
:
std::cout << std::fixed;
Sets the
floatfield
format flag for the str stream to fixed.When
floatfield
is set tofixed
, floating-point values are written using fixed-point notation: the value is represented with exactly as many digits in the decimal part as specified by the precision field (precision
) and with no exponent part.
The three C format specifiers map to corresponding format setting in C++ IOStreams:
%f
-> std::ios_base::fixed
(fixed point notation) typically set using out << std::fixed
. %e
-> std::ios_base::scientific
(scientific notation) typically set using out << std::scientific
. %g
-> the default setting, typically set using out.setf(std::fmtflags(), std::ios_base::floatfield)
or with C++11 and later out << std::defaultfloat
. The default formatting is trying to yield the "best" of the other formats assuming a fixed amount of digits to be used. The precision, the width, and the fill character match the way you already stated.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.