匹配 printf 格式与 iomanip

Matching printf Formatting with iomanip

我有一些旧的 C 代码,我试图复制 C++ 中的行为。它使用 printf 修饰符:“%06.02f”。

我天真地认为 iomanip 也一样能干,结果:

cout << setfill('0') << setw(6) << setprecision(2)

当我尝试输出测试编号 123.456 时,printf 产生:

123.46

但是 cout 产生:

1.2+e02

我可以在 iomanip 中做些什么来复制这个,还是我必须回去使用 printf

[Live Example]

尝试 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.

三个 C 格式说明符映射到 C++ IOStreams 中相应的格式设置:

  • %f -> std::ios_base::fixed(定点表示法)通常使用 out << std::fixed.
  • 设置
  • %e -> std::ios_base::scientific(科学计数法)通常使用 out << std::scientific.
  • 设置
  • %g -> 默认设置,通常使用 out.setf(std::fmtflags(), std::ios_base::floatfield) 或 C++11 及更高版本 out << std::defaultfloat 设置。默认格式试图产生其他格式的 "best" 假设要使用固定数量的数字。

精度、宽度和填充字符与您已经陈述的方式相匹配。