简体   繁体   中英

Matching printf Formatting with iomanip

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 to fixed , 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM