2

在C++中,我有一些像这样的代码:如何获得std :: stringsteam来排列浮点数的小数位?

float hits = 10.12; 
float mins = 2.19; 
std::ostringstream ss; 

ss.precision(2); 

ss << std::fixed << hits << "%\n" 
    << std::fixed << mins << "%"; 

std::cout << ss.str(); 

这是给我这个输出:

10.12% 
2.19% 

然而,不是我想的小数点对齐:

10.12% 
2.19% 

有没有办法用小数点前的空格填充小数点前两位数的固定宽度的空格?

+0

该文档说什么? – 2013-03-13 14:00:24

+0

@彼得 - 这种东西不直观,就像很多'iostreams'的花里胡哨一样。我认为这是一个很好的问题,不值得RTFM的回应。 – 2013-03-13 14:01:42

+0

@彼得伍德:什么文件?或者您的评论只是一个很好的RTFM? – aggsol 2013-03-13 14:02:04

回答

6

使用width设置列大小,然后使用std::right来证明输出正确。

+1

..并小心将宽度设置得足够宽,以免数字溢出边界 – quetzalcoatl 2013-03-13 14:00:45

+1

或者使用'std :: fill'填充前面的空格。 – aggsol 2013-03-13 14:00:51

3

setw()setprecision()来确定输出宽度和浮点值的精度。所以你应该可以像

ss << setw(8) << hits << "%\n"; ... 

here作为参考。

+0

这个'setw()'也适用于'std :: fill()'。我赞成这个答案。 – aggsol 2013-03-13 14:04:02

+0

@SteveTownsend我读过这个,谢谢澄清。 – 2013-03-13 14:05:03