在 C# 中,如何在不使负值变长的情况下使用零填充格式化整数?

In C#, how can I format integers with zero-padding without making negative values longer?

我正在使用 C# .Net 5.0,Visual Studio。我正在格式化整数以像这样填充零

$"{-1:d04}"
$"{1:d04}"

格式化正数和负数给出不同长度的结果字符串

-0001
0001

我需要我的数字是相同的长度(即这个例子中的结果应该是字符串"-001""0001"),有没有是否存在任何格式化模式来实现此目的?

一种方法是使用 ; specifier 为非负数和负数提供两种格式。

int x = 1;
Console.WriteLine($"{x:0000;-000}"); // "0001"
x = -1;
Console.WriteLine($"{x:0000;-000}"); // "-001"

0000 表示正数,-000 表示负数。

这意味着您不再使用标准格式说明符 D,它会自动使用当前 NumberFormatInfo 中的 NegativeSign。您必须对负号登录进行硬编码。这可能是问题,也可能不是问题,具体取决于您在做什么。

编辑:

显然这是为了对字符串进行排序。如果格式不必完全是“0001”和“-001”,只要长度相同,那么我建议:

int x = 1;
Console.WriteLine($"{x,5:d04}"); // " 0001" (note the leading space)
x = -1;
Console.WriteLine($"{x,5:d04}"); // "-0001"