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


245

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

Key = i.ToString();

但是我意识到它的排序顺序很奇怪,因此我需要用零填充。我该怎么办?


Answers:


343

相当简单:

Key = i.ToString("D2");

D代表“十进制数”,2代表要打印的位数。


7
如果使用,string.Format("D2", value)您将获得D2输出。这行不通。"{0:00}"在这种情况下,我们必须使用。
v.oddou

41
您应该string.Format("{0:D2}", value)改用。只是说string.Format("D2", ...)不会替换任何东西,因为您没有占位符。
infinitypanda

5
@infinitypanda意识到只有valueint 才可以使用。value例如,如果是双string.Format("{0:00}", value)
精度数

如果我们在谈论“前导数字”,我想答案应该是i.ToString(“ 00”); 其中“ 00”代表前导零。.您可以尽可能增加此数量。
Dedan


72

如果您希望将其保持固定的宽度(例如10位数字),请按照以下步骤操作

Key = i.ToString("0000000000");

用任意多的数字替换。

i = 123然后将导致Key = "0000000123"


63

由于尚未有人提到这一点,因此,如果您使用的是C#版本6或更高版本(即Visual Studio 2015),则可以使用字符串插值来简化代码。因此string.Format(...),除了使用,您可以执行以下操作:

Key = $"{i:D2}";

33

用:

i.ToString("D10")

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

或使用String.PadLeft。例如,

int i = 321;
Key = i.ToString().PadLeft(10, '0');

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

请参阅String.PadLeft(MSDN)。


4
我想一旦您尝试将其与负数结合使用,就会使您感到困惑。
Mario

谢谢-我用了第二个。我省略了“ .ToString()”-它仍然有效。
Sunsetquest

14

通常,String.Format(“ format”,object)优于object.ToString(“ format”)。因此,

String.Format("{0:00000}", 15);  

优于

Key = i.ToString("000000");

4
是的,正如@cja所问,为什么更可取?我并不是反对这个主张,我想知道为什么。
克里斯托弗·金

第一种语法“感觉”更精确,可预测和清晰。最好将其表示为Key = String.Format(“ {0:00000}”,15); 与Key = i.ToString(“ 000000”)进行比较;使用第一种语法,我很确定自己确切知道要得到的结果,如果按字节排序,我就知道要更改的内容(格式字符串。总之,对于我来说,它更可取情感上的个人偏爱,几乎没有一个合理的半理由;-)那么就决定了吗?
Developer63

13

尝试:

Key = i.ToString("000000");

不过,就我个人而言,我将看看您是否不能直接对整数而不是字符串表示进行排序。



3

在这里,我希望我的no限制在4位,例如如果为1,则应显示为0001,如果为11,则应显示为0011 ..下面是代码。

        reciptno=1;//Pass only integer.

        string formatted = string.Format("{0:0000}", reciptno);

        TxtRecNo.Text = formatted;//Output=0001..

我实现了此代码以生成钱收据编号。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.