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

3

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

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

问题在于如果要将类似于"02112321"的值格式化成"02 112 321",需要应用精确的格式"## ### ###"。这种情况下,0会消失。

2
如何使用 $"{myStr.Substring(0,2)} {myStr.Substring(2,3)} {myStr.Substring(5,3)} - Flydog57
你是在问如何将字符串转换为整数吗?还是如何处理前导零? - Blindy
我遇到的问题是前导零。 - Arianule
@Arianule 那么你应该编辑你的问题,以使其清晰明了。现在的情况是,看起来你正在尝试将一个字符串格式更改为另一个。 - Magnetron
好的,谢谢。我更新了问题以反映前导零的问题。 - Arianule
2个回答

9

格式化是通过给值确定一定的形式来将其转换为字符串。因此,格式化不适用于字符串(因为它们已经是字符串)。您可以将字符串转换为数字,然后再将其转换回字符串并应用所需的格式。

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

4
您可以使用0作为格式说明符。来自文档

如果存在相应的数字,则使用0替换0;否则,在结果字符串中出现0。

您可以这样做:

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)

4
OP 希望格式化一个字符串而不是一个整数。 - Olivier Jacot-Descombes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接