John Stephen
John Stephen

Reputation: 7734

How to format padded signed numbers in a stringstream

I'm trying to format numbers using C++ streams and am having trouble with the sign character being placed after the fill instead of before. When I do this:

std::cout << std::setfill('0') << std::setw(6) << -1;

The output is

0000-1

But what I want is

-00001

With printf I can use a format like "%06d" and it works the way I expect with the sign placed before the zeroes, but I want to get the same effect in a stream and not use the old formatting functions. I can't use C++20 yet either, so std::format isn't available to me yet.

Upvotes: 1

Views: 91

Answers (1)

John Stephen
John Stephen

Reputation: 7734

I should have looked a little longer before posting. The answer is the std::internal manipulator, which causes the padding to be done internally within the field. This works correctly:

std::cout << std::internal << std::setfill('0') << std::setw(6) << -1;

-00001

Upvotes: 1

Related Questions