我试图肯定我的知识,关于溪流如何与双打和各种操纵者一起工作,并偶然发现G ++做了一些奇怪的事情:
int main() {
double v = 10.0/3.;
//std::cout << v << '\n';
std::cout << std::setw(5) << std::setprecision(2) << v << '\n';
std::cout << std::setw(5) << std::setprecision(2) << std::fixed << v << '\n';
}
输出:
3.3 //why is this left aligned?
3.33 //why is this right aligned? which is right?
然后我取消评论第一个cout并得到不同的结果!
3.33333 //which alignment is this?
3.3 //now this is right aligned?!
3.33 //that implies right-aligned is correct
后续测试显示第一个双流输出是左对齐的,所有后续双精度都是右对齐的:
double v = 10.0/3.;
std::cout << std::setw(10) << v << '\n';
std::cout << std::setw(5) << std::setprecision(2) << std::fixed << v << '\n';
std::cout << std::setw(5) << std::setprecision(2) << v << '\n';
std::cout << std::setw(5) << std::setprecision(2) << v << '\n';
输出:
3.33333 //well, this is left aligned
3.33
3.3
3.3 //all subsequent tests are right aligned
Coliru上的Clang ++正在做同样的事情,我认为是因为他们使用相同的库。
我知道“这是一个G ++错误”的答案不是99.9%,所以有人可以解释我所看到的行为吗?
答案 0 :(得分:2)