问题
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?
回答1:
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
来源:https://stackoverflow.com/questions/17543883/correctly-pad-negative-integers-with-zeros-with-stdcout