Правильно положительные отрицательные целые числа с нулями с std:: cout

Я понял, что этот вопрос уже задан, но ответ, который все дают,

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

который отлично подходит для положительных чисел, но с -5, он печатает:

000-5

Есть ли способ сделать это print -0005 или заставить cout всегда печатать как минимум 5 цифр (что приведет к -00005), как мы можем сделать с printf?

Ответ 1

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

Вывод:

-0005

std:: internal

Edit:

Для тех, кто заботится о таких вещах, 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