std::ostream& operator<<(std::ostream& o, const mat4& m)
{
o << std::setprecision(6) << std::fixed << std::right;
const int w = 8;
for (int i = 0; i < 4; i++)
{
int j = 4 * i;
o << '[' << std::setw(w) << m[j] << ',' << std::setw(w) << m[1 + j] << ',' << std::setw(w) << m[2 + j] << ',' << std::setw(w) << m[3 + j] << ']' << std::endl;
}
return o;
}
我想将我的数据打印为:
[-1.00000, 1.00000, 123.000,-23.0000]
这是我想要实现的:
- 如果负号不存在则加一个空格
- 字符串的大小是固定的,只显示最重要的值
我正在考虑使用 std::fixed
或 std::scientific
但不知道如何使用 iomanip 实现上述格式。这甚至可以用 iomanip 完成,还是我需要实现自己的方法?
最佳答案
你想要setiosflags(ios_base::showpoint)
#include <iomanip>
#include <iostream>
int main()
{
double m[] = {-1, 1, 123, -23};
const int w = 8;
std::cout << std::setiosflags(std::ios_base::showpoint);
std::cout << '[' << std::setw(w) << m[0] << ',' << std::setw(w) << m[1] << ',' << std::setw(w) << m[2] << ',' << std::setw(w) << m[3] << ']' << std::endl;
}
结果是:
[-1.00000, 1.00000, 123.000,-23.0000]
关于c++ - C++中的cout浮点格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33578751/