如何将数字格式化为带前导零的字符串?

Man*_*ton 225 c# string string-formatting

我有一个我需要转换为字符串的数字.首先我使用了这个:

Key = i.ToString();
Run Code Online (Sandbox Code Playgroud)

但我意识到它是按照一个奇怪的顺序排序,所以我需要用零填充它.我怎么能这样做?

Mar*_*rio 323

相当简单:

Key = i.ToString("D2");
Run Code Online (Sandbox Code Playgroud)

D代表"十进制数",2表示要打印的位数.

  • 你应该使用`string.Format("{0:D2}",value)`.只是说`string.Format("D2",...)`不会替换任何东西,因为你没有占位符. (37认同)
  • 如果你使用`string.Format("D2",value)`你将在输出中得到'D2`.这不起作用.在这种情况下我们必须使用"{0:00}". (7认同)
  • @infinitypanda意识到这只会在`value`为int时起作用.例如,如果`value`是double,它必须是`string.Format("{0:00}",value)` (4认同)

Pau*_*aul 188

有关String.Format的一些示例用法,请参阅C#中的字符串格式

实际上是格式化int的更好例子

String.Format("{0:00000}", 15);          // "00015"
Run Code Online (Sandbox Code Playgroud)

或使用String Interpolation:

$"{15:00000}";                           // "00015"
Run Code Online (Sandbox Code Playgroud)

  • 甚至更短的方式:`$"{15:D5}";`将导致输出:`"00015"`。 (8认同)
  • 请注意 String.Format("{0:00000}", "15"); 返回“15”,即它不适用于字符串。 (6认同)
  • 如果您有 `int i` 并且需要 8 位数字,只需使用 `var iStr = $"{i:D8}`。 (3认同)

Øyv*_*hen 66

如果你想保持固定宽度,例如10位数,就这样做吧

Key = i.ToString("0000000000");
Run Code Online (Sandbox Code Playgroud)

替换为任意数量的数字.

i = 123然后会导致Key = "0000000123".


Dav*_*idG 58

由于没有人提到这一点,如果您使用的是C#6或更高版本(即Visual Studio 2015),那么您可以使用字符串插值来简化代码.所以不要使用string.Format(...),你可以这样做:

Key = $"{i:D2}";
Run Code Online (Sandbox Code Playgroud)


fir*_*986 30

使用:

i.ToString("D10")
Run Code Online (Sandbox Code Playgroud)

请参见Int32.ToString(MSDN)和标准数字格式字符串(MSDN).

或者使用String.PadLeft.例如,

int i = 321;
Key = i.ToString().PadLeft(10, '0');
Run Code Online (Sandbox Code Playgroud)

会导致0000000321.虽然String.PadLeft不适用于负数.

请参见String.PadLeft(MSDN).

  • 我想,一旦你尝试使用负数,这会让你感到沮丧. (4认同)

Ala*_*met 17

对于内插字符串:

$"Int value: {someInt:D4} or {someInt:0000}. Float: {someFloat: 00.00}"
Run Code Online (Sandbox Code Playgroud)


Cha*_*age 14

通常String.Format("format",object)优于object.ToString("format").因此,

String.Format("{0:00000}", 15);  
Run Code Online (Sandbox Code Playgroud)

比较好,

Key = i.ToString("000000");
Run Code Online (Sandbox Code Playgroud)

  • 是的,正如@cja所问,为什么它更可取?而且我不反对这个断言,我想知道为什么. (4认同)
  • 你应该说明原因 (3认同)

Mar*_*ell 13

尝试:

Key = i.ToString("000000");
Run Code Online (Sandbox Code Playgroud)

但就个人而言,我会看到你是否不能直接对整数进行排序,而不是字符串表示.


Gay*_*hna 5

int num=1;
string number=num.ToString().PadLeft(4, '0')
Run Code Online (Sandbox Code Playgroud)

输出=“00001”

编辑:更改为匹配 PadLeft 数量