Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Correctly pad negative integers with zeros with std::cout

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?

like image 434
Philippe Avatar asked Jul 09 '13 08:07

Philippe


People also ask

Can you have a negative int in C++?

An int is signed by default, meaning it can represent both positive and negative values.

Can integers be negative in coding?

All the whole numbers are also integers, because integers include all the positive and negative numbers.


1 Answers

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
like image 140
BoBTFish Avatar answered Oct 15 '22 20:10

BoBTFish