在 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"
我正在使用 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"