我有一些旧的C代码,我正在尝试复制C++中的行为。它使用printf修饰符:"%06.02f“。
我天真地认为iomanip同样有能力,并且做到了:
cout << setfill('0') << setw(6) << setprecision(2)当我试图输出测试编号123.456时,printf产生:
123.46
但cout的收益是:
1.2+e02
在iomanip中有什么可以复制的吗?还是必须重新使用printf?
[Live Example]
发布于 2015-12-14 20:06:48
三个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-14 20:01:46
试试std::fixed
std::cout << std::fixed;将str流的
floatfield格式标志设置为固定。 当floatfield设置为fixed时,浮点值是用定点表示法编写的:该值用精确字段(precision)指定的小数位数表示,没有指数部分。
https://stackoverflow.com/questions/34275542
复制相似问题