我有一些旧的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
设置。默认格式是在假设使用固定数量的数字的情况下,尝试产生其他格式中的"最佳"格式
精度、宽度和填充字符与您已经说明的方式相匹配。