将printf格式与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吗?

[实际示例]

尝试std::fixed:

std::cout << std::fixed;

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

floatfield设置为fixed时,浮点值使用定点表示法写入:该值在小数部分中的位数与精度字段precision)指定的位数完全相同,并且不包含指数部分。

三个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设置。默认格式是在假设使用固定数量的数字的情况下,尝试产生其他格式中的"最佳"格式

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

相关内容

  • 没有找到相关文章

最新更新