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