Bagaimana saya bisa memformat angka menjadi string dengan angka nol di depan?

246

Saya memiliki nomor yang harus dikonversi menjadi string. Pertama saya menggunakan ini:

Key = i.ToString();

Tapi saya menyadari itu sedang diurutkan dalam urutan yang aneh dan jadi saya perlu menambahkannya dengan nol. Bagaimana saya bisa melakukan ini?

Mandy Weston
sumber
8
mungkin duplikat dari C # convert int ke string dengan nol padding?
nawfal

Jawaban:

344

Agak sederhana:

Key = i.ToString("D2");

Dsingkatan dari "angka desimal", 2untuk jumlah digit yang akan dicetak.

Mario
sumber
7
Jika Anda menggunakan string.Format("D2", value)Anda akan mendapatkan D2dalam output. ini tidak berhasil. Kita harus menggunakan "{0:00}"dalam hal ini.
v.oddou
42
Anda harus menggunakannya string.Format("{0:D2}", value)sebagai gantinya. Hanya mengatakan string.Format("D2", ...)tidak akan menggantikan apa pun, apa pun karena Anda tidak memiliki pengganti.
infinitypanda
5
@infinitypanda menyadari bahwa ini hanya akan berfungsi ketika valueint. Jika valueganda, misalnya, harusstring.Format("{0:00}", value)
derekantrican
jika kita berbicara tentang 'digit terdepan' saya pikir jawabannya adalah i.ToString ("00"); di mana "00" mewakili nol terkemuka .. Anda dapat meningkatkan jumlah ini sebanyak mungkin.
Dedan
198

Lihat Pemformatan string dalam C # untuk beberapa contoh penggunaan String.Format

Sebenarnya contoh yang lebih baik dari format int

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

atau gunakan Interpolasi String :

$"{15:00000}";                           // "00015"
Paul
sumber
2
Perhatikan bahwa String.Format ("{0: 00000}", "15"); mengembalikan "15", yaitu tidak bekerja pada string.
Paul McCarthy
72

Jika Anda ingin menjaganya tetap lebar, misalnya 10 digit, lakukan seperti ini

Key = i.ToString("0000000000");

Ganti dengan digit sebanyak yang Anda suka.

i = 123akan menghasilkan Key = "0000000123".

Øyvind Bråthen
sumber
63

Karena belum ada yang menyebutkan ini, jika Anda menggunakan C # versi 6 atau lebih tinggi (yaitu Visual Studio 2015) maka Anda dapat menggunakan interpolasi string untuk menyederhanakan kode Anda. Jadi alih-alih menggunakan string.Format(...), Anda bisa melakukan ini:

Key = $"{i:D2}";
DavidG
sumber
33

menggunakan:

i.ToString("D10")

Lihat Int32.ToString (MSDN), dan Standard Numeric Format Strings (MSDN).

Atau gunakan String.PadLeft. Sebagai contoh,

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

Akan menghasilkan 0000000321. Padahal String.PadLefttidak akan berfungsi untuk angka negatif.

Lihat String.PadLeft (MSDN).

firefox1986
sumber
4
Saya kira itu akan mengacaukan Anda setelah Anda mencoba menggunakannya dengan angka negatif.
Mario
Terima kasih - saya menggunakan yang kedua. Saya meninggalkan ".ToString ()" - masih berfungsi.
Sunsetquest
14

Biasanya String.Format ("format", objek) lebih disukai daripada objek.ToString ("format"). Karena itu,

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

lebih disukai daripada,

Key = i.ToString("000000");
Chameera Dedduwage
sumber
4
Ya, seperti yang ditanyakan oleh @cja, mengapa lebih disukai? Dan saya tidak membantah pernyataan itu, saya ingin tahu mengapa.
Christopher King
Sintaks pertama "terasa" lebih tepat, dapat diprediksi, dan jelas. Dan akan lebih baik dinyatakan sebagai Key = String.Format ("{0: 00000}", 15); yang dibandingkan dengan Key = i.ToString ("000000"); Dengan sintaks pertama, saya cukup yakin saya tahu persis hasil yang akan saya dapatkan, dan jika kebetulan saya satu karakter, saya tahu persis apa yang harus diubah (format string. Jadi, singkatnya, bagi saya itu lebih disukai untuk preferensi pribadi emosional, lemah didukung oleh satu alasan yang hampir masuk akal ;-) Jadi sudah diputuskan?
Developer63
13

Mencoba:

Key = i.ToString("000000");

Namun secara pribadi, saya akan melihat apakah Anda tidak dapat mengurutkan pada integer secara langsung, daripada representasi string.

Marc Gravell
sumber
7

Untuk string interpolasi:

$"Int value: {someInt:D4} or {someInt:0000}. Float: {someFloat: 00.00}"
Alan Samet
sumber
3

Di sini saya ingin tidak saya membatasi dalam 4 digit seperti jika itu 1 itu harus ditampilkan sebagai 0001, jika 11 itu harus ditampilkan sebagai 0011 .. Di bawah ini adalah kode.

        reciptno=1;//Pass only integer.

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

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

Saya menerapkan kode ini untuk menghasilkan tanda terima uang no.

saktiprasad swain
sumber
1
int num=1;
string number=num.ToString().PadLeft(4, '0')

Output = "00001"

EDIT: Diubah agar sesuai dengan jumlah PadLeft

Gayan Chinthaka Dharmarathna
sumber