ฉันจะจัดรูปแบบตัวเลขเป็นสตริงด้วยศูนย์นำหน้าได้อย่างไร


246

ฉันมีจำนวนที่ฉันต้องการแปลงเป็นสตริง ก่อนอื่นฉันใช้สิ่งนี้:

Key = i.ToString();

แต่ฉันรู้ว่ามันถูกเรียงลำดับแปลก ๆ ดังนั้นฉันต้องใช้มันด้วยเลขศูนย์ ฉันจะทำสิ่งนี้ได้อย่างไร


คำตอบ:


344

ค่อนข้างง่าย:

Key = i.ToString("D2");

Dย่อมาจาก "ทศนิยม" 2สำหรับจำนวนตัวเลขที่จะพิมพ์


7
ถ้าคุณใช้string.Format("D2", value)คุณจะได้รับD2ผลลัพธ์ มันไม่ทำงาน เราต้องใช้"{0:00}"ในกรณีนี้
v.oddou

42
คุณควรใช้string.Format("{0:D2}", value)แทน เพียงแค่พูดว่าstring.Format("D2", ...)จะไม่แทนที่สิ่งใดไม่ว่าจะเกิดอะไรขึ้นเนื่องจากคุณไม่มีตัวยึดตำแหน่ง
infinitypanda

5
@ infinitypanda ตระหนักดีว่านี่จะใช้งานได้valueก็ต่อเมื่อเป็น int valueตัวอย่างเช่นถ้าเป็นสองเท่ามันจะต้องเป็นstring.Format("{0:00}", value)
derekantrican

ถ้าเรากำลังพูดถึง 'เลขนำหน้า' ฉันคิดว่าคำตอบคือ i.ToString ("00"); โดยที่ "00" แทนค่าศูนย์นำหน้า .. คุณสามารถเพิ่มจำนวนนี้ให้มากที่สุด
Dedan

198

ดูการจัดรูปแบบสตริงใน C #สำหรับตัวอย่างการใช้งานของ String.Format

จริงๆแล้วเป็นตัวอย่างที่ดีกว่าของการจัดรูปแบบ int

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

หรือใช้การแก้ไขสตริง :

$"{15:00000}";                           // "00015"

2
โปรดสังเกตว่า String.Format ("{0: 00000}", "15"); ส่งกลับค่า "15" นั่นคือมันไม่ทำงานบนสตริง
Paul McCarthy

72

หากคุณต้องการคงความกว้างคงที่ไว้เช่น 10 หลักให้ทำเช่นนี้

Key = i.ToString("0000000000");

แทนที่ด้วยตัวเลขมากเท่าที่คุณต้องการ

i = 123Key = "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 ถามทำไมจึงเป็นสิ่งที่ดีกว่า และฉันไม่เถียงกับการยืนยันฉันอยากจะรู้ว่าทำไม
Christopher King

ไวยากรณ์แรก "รู้สึก" แม่นยำแม่นยำคาดเดาและชัดเจนมากขึ้น และมันจะดีกว่าที่ระบุไว้เป็น Key = String.Format ("{0: 00000}", 15); ที่กำลังถูกเปรียบเทียบกับ Key = i.ToString ("000000"); ด้วยไวยากรณ์แรกฉันค่อนข้างแน่ใจว่าฉันรู้ว่าผลลัพธ์ที่ฉันจะได้รับและถ้า bychance ฉันเป็นตัวละครตัวหนึ่งฉันรู้ว่าจะต้องเปลี่ยนแปลงอะไร (สตริงรูปแบบดังนั้นโดยย่อสำหรับฉันแล้ว การตั้งค่าส่วนตัวทางอารมณ์ได้รับการสนับสนุนอย่างอ่อนแอโดยเหตุผลครึ่งหนึ่งเหตุผลที่เป็นไปได้ ;-) ดังนั้นมันจึงตัดสินใจแล้ว?
Developer63

13

ลอง:

Key = i.ToString("000000");

แม้ว่าโดยส่วนตัวแล้วฉันจะดูว่าคุณไม่สามารถเรียงลำดับบนจำนวนเต็มโดยตรงแทนที่จะแสดงสตริงได้หรือไม่



3

ที่นี่ฉันต้องการไม่ จำกัด จำนวน 4 หลักเช่นถ้าเป็น 1 ควรแสดงเป็น 0001 ถ้าเป็น 11 ควรแสดงเป็น 0011 .. ด้านล่างเป็นรหัส

        reciptno=1;//Pass only integer.

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

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

ฉันใช้รหัสนี้เพื่อสร้างหมายเลขรับเงิน


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.