格式化 int 值时如何处理前导零

How to deal with leading zeros when formatting an int value

有点空白。如果我想将以下格式 (## ### ###) 应用于 int 值,我会这样做。

string myFormat = "## ### ###";
int myPin = 18146145;
Console.WriteLine(myPin.ToString(myFormat)); //18 146 145

然而,问题是 "02112321" 的值被格式化为 "02 112 321" 应用此精确格式 "## ### ###"。这种情况下的 0 会消失。

您可以使用 0 作为格式说明符。来自 documentation :

Replaces the zero with the corresponding digit if one is present; otherwise, zero appears in the result string.

你可以这样做:

02112321.ToString("00 000 000", CultureInfo.InvariantCulture)

编辑: 正如@olivier-jacot-descombes 所指出的,我漏掉了一点。 OP 想要将整数从字符串格式化为字符串。例如 "02112321""02 112 321".

中间转换是可能的,从字符串到整数再到字符串。通过这个例子,这完成了 "02112321"02112321"02 112 321" :

var original = "02112321";
var toInt = int.Parse(original, CultureInfo.InvariantCulture);
var formated = toInt.ToString("00 000 000", CultureInfo.InvariantCulture)

格式化包括通过赋予特定形状将值转换为字符串。因此,格式化不适用于字符串(因为它们已经是字符串)。您可以将字符串转换为数字,然后将其转换回字符串并应用所需的格式。

string myFormat = "00 000 000";
string s = "02112321";
string formatted = Int32.Parse(s).ToString(myFormat); // ==> "02 112 321"

如果需要前导零,请使用格式字符串 "00 000 000" 而不是 "## ### ###"

请注意 Int32.MaxValue2,147,483,647。如果您需要格式化更大的数字,请使用 Int64.Parse 允许数字最多 9,223,372,036,854,775,807.