Bir sayıyı baştaki sıfırlarla bir dizeye nasıl biçimlendirebilirim?


Yanıtlar:


344

Oldukça basit:

Key = i.ToString("D2");

D2yazdırılacak basamak sayısı için "ondalık sayı" anlamına gelir .


7
kullanırsanız çıktı string.Format("D2", value)alırsınız D2. bu işe yaramıyor. "{0:00}"Bu durumda kullanmalıyız .
v.oddou

42
Bunun string.Format("{0:D2}", value)yerine kullanmalısınız . Sadece söyleyerek string.Format("D2", ...)Yer tutucu olmadığı için ne olursa olsun hiçbir şey değiştirmez.
infinitypanda

5
@infinitypanda, bunun yalnızca valueint olduğunda çalışacağının farkındadır . Örneğin value, bir çift ise, olması gerekirstring.Format("{0:00}", value)
derekantrican

eğer 'önde gelen rakamlardan' bahsedersek, cevap i.ToString ("00") olacaktır; burada "00" baştaki sıfırları temsil eder .. bu miktarı mümkün olduğunca artırabilirsiniz.
Dedan


72

Sabit genişliği, örneğin 10 basamaklı tutmak istiyorsanız, bunu yapın

Key = i.ToString("0000000000");

İstediğiniz kadar basamakla değiştirin.

i = 123sonra sonuçlanır Key = "0000000123".


63

Henüz kimse bundan bahsetmediği için, C # sürüm 6 veya üstü (yani Visual Studio 2015) kullanıyorsanız , kodunuzu basitleştirmek için dize enterpolasyonunu kullanabilirsiniz . Yani kullanmak yerine string.Format(...), bunu yapabilirsiniz:

Key = $"{i:D2}";

33

kullanın:

i.ToString("D10")

Bkz. Int32.ToString (MSDN) ve Standart Sayısal Biçim Dizeleri (MSDN).

Veya kullan String.PadLeft . Örneğin,

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

İle sonuçlanır 0000000321 . RağmenString.PadLeft negatif sayılar için çalışma olmaz.

Bkz. String.PadLeft (MSDN).


4
Sanırım negatif sayılarla kullanmaya çalıştığınızda sizi mahvedecek.
Mario

Teşekkürler - ikincisini kullandım. ".ToString ()" i bıraktım - hala çalışıyor.
Sunsetquest

14

Genellikle String.Format ("format", nesne) object.ToString ("format") yerine tercih edilir. Bu nedenle,

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

tercih edilir,

Key = i.ToString("000000");

4
Evet, @cja'nın sorduğu gibi, neden tercih edilir? Ve iddiaya karşı çıkmıyorum, nedenini bilmek istiyorum.
Christopher King

İlk sözdizimi daha kesin, öngörülebilir ve açıktır. Ve daha iyi Key = String.Format ("{0: 00000}", 15); Key = i.ToString ("000000") ile karşılaştırılıyor; İlk sözdizimiyle, alacağım sonucu tam olarak bildiğime eminim ve eğer bir karakter kapalıysam, tam olarak neyi değiştireceğimi biliyorum (dize biçimlendir. Yani kısacası, benim için tercih edilir duygusal olarak kişisel tercih, neredeyse makul bir yarı sebeple zayıf bir şekilde destekleniyor ;-) Öyleyse karar veriliyor mu?
Developer63

13

Deneyin:

Key = i.ToString("000000");

Şahsen, dize temsilinden ziyade, tamsayı üzerinde doğrudan sıralama yapıp yapamayacağınızı görüyorum.


7

Enterpolasyonlu dizeler için:

$"Int value: {someInt:D4} or {someInt:0000}. Float: {someFloat: 00.00}"

3

Burada benim 1 4 gibi 0001 olarak göstermek gerekir gibi 4 basamakta sınırlamak istiyorum, 11 0011 olarak göstermelidir. Aşağıda kod vardır.

        reciptno=1;//Pass only integer.

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

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

Bu kodu Para makbuz no oluşturmak için uyguladı.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.