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