I found this question already asked, but the answer everybody gives is
std::cout << std::setw(5) << std::setfill('0') << value << std::endl;
which is fine for positive numbers, but with -5, it prints:
000-5
Is there a way to make it print -0005 or to force cout to always print at least 5 digits (which would result in -00005) as we can do with printf?
An int is signed by default, meaning it can represent both positive and negative values.
All the whole numbers are also integers, because integers include all the positive and negative numbers.
std::cout << std::setw(5) << std::setfill('0') << std::internal << -5 << '\n';
// ^^^^^^^^
Output:
-0005
std::internal
Edit:
For those those that care about such things, 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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With