匹配 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
?
尝试 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" 假设要使用固定数量的数字。
精度、宽度和填充字符与您已经陈述的方式相匹配。
我有一些旧的 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;
Sets the
floatfield
format flag for the str stream to fixed.When
floatfield
is set tofixed
, 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" 假设要使用固定数量的数字。
精度、宽度和填充字符与您已经陈述的方式相匹配。