使用 fmtlib,零填充数值在值为负时更短,我可以适应这种行为吗?

Using fmtlib, zero padded numerical value are shorter when the value is negative, can I adapt this behaviour?

我正在使用 fmtlib 来格式化字符串和数值,但我遇到负整数问题。 当我用零填充值时,无论值的符号如何,我都希望零的数量一致。

例如,使用 4 的填充,我想要以下内容:

fmtlib 的默认行为是将前缀长度(即符号“-”)考虑到填充长度中,这意味着 -2 返回为“-002”

这是一个例子:

#include <iostream>
#include "fmt/format.h"

int main()
{
    std::cout << fmt::format("{:04}", -2) << std::endl;
}

将输出:-002

有没有一种方法可以切换此行为或使用其他方法对值进行零填充以获得我的预期结果?

感谢您的帮助,

fmt 或 Python 的 str.format(fmt 的语法所基于的)的文档中肯定没有任何内容。两者都只声明填充是“sign-aware”。

要求 Python 的 str.format 具有相同的功能。接受的答案是将长度移动到一个参数,如果数字为负,则将其变大。将其转换为 C++:

for (auto x : { -2, 2 }) {
    fmt::print("{0:0{1}}\n", x, x < 0 ? 5 : 4 ); // prints -0002 and 0002
}

分解格式语法:

{0:0{1}}
 │ │ └ position of the argument with the length
 │ └── "pad with zeros"
 └──── position of the argument with the value

https://godbolt.org/z/5xz7T9