14

我发现这个问题已经问过了,但每个人给出的答案是

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

这对于正数很好,但使用 -5,它会打印:

000-5

有没有办法让它打印 -0005 或强制 cout 总是打印至少 5 位数字(这将导致 -00005),就像我们可以用 printf 做的那样?

4

2 回答 2

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

输出:

-0005

标准::内部

编辑:

对于那些关心这些事情的人,N3337(~c++1122.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
于 2013-07-09T08:54:19.867 回答
2

在 C++20 中,您将能够使用它std::format来执行此操作:

std::cout << std::format("{:05}\n", -5);  

输出:

-0005

同时你可以使用基于的 {fmt}std::format。{fmt} 还提供了print使这更容易和更高效的功能(godbolt):

fmt::print("{:05}\n", -5); 

免责声明:我是 {fmt} 和 C++20 的作者std::format

于 2021-03-03T04:10:01.873 回答