2013-07-09 20 views
10

ich diese Frage schon gefragt gefunden, aber die Antwort jeder gibt, istKorrekt Pad negative ganze Zahlen mit Nullen mit std :: cout

std::cout << std::setw(5) << std::setfill('0') << value << std::endl; 

, die für positive Zahlen in Ordnung ist, aber mit -5, druckt es:

Gibt es eine Möglichkeit, print -0005 zu drucken oder zu zwingen, immer mindestens 5 Ziffern zu drucken (was -00005 ergeben würde), wie wir mit printf machen können?

Antwort

15
std::cout << std::setw(5) << std::setfill('0') << std::internal << -5 << '\n'; 
//              ^^^^^^^^ 

Ausgang:

-0005 

std::internal

Edit:

Für diejenigen, die über solche Dinge kümmern, N3337 (~c++11), 22.4.2.2.2:

The location of any padding is determined according to Table 91. 
        Table 91 - Fill padding 
State        Location 
adjustfield == ios_base::left  pad after 
adjustfield == ios_base::right  pad before 
adjustfield == internal and a 
sign occurs in the representation pad after the sign 
adjustfield == internal and 
representation after stage 1 began 
with 0x or 0X      pad after x or X 
otherwise       pad before 
+0

Es funktioniert, danke! – Philippe

+0

Sie sind herzlich willkommen! Diese Frage ging gut und schnell. Hoffe, das hilft auch anderen Menschen. – BoBTFish