7

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

我天真地认为这iomanip同样有能力,并做到了:

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

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

123.46

cout产量:

1.2+e02

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

[现场示例]

4

2 回答 2

4

尝试std::fixed

std::cout << std::fixed;

将 str 流的floatfield格式标志设置为固定。

floatfield设置为 时fixed,浮点值使用定点表示法写入:该值由精度字段( precision) 指定的小数部分中的位数表示,并且没有指数部分。

于 2015-12-14T20:01:46.440 回答
2

三个 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。假设要使用固定数量的数字,默认格式试图产生其他格式的“最佳”。

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

于 2015-12-14T20:06:48.393 回答