Làm thế nào tôi có thể định dạng một số thành một chuỗi với các số 0 đứng đầu?


245

Tôi có một số mà tôi cần phải chuyển đổi thành một chuỗi. Đầu tiên tôi sử dụng cái này:

Key = i.ToString();

Nhưng tôi nhận ra nó được sắp xếp theo một thứ tự lạ và vì vậy tôi cần phải đệm nó bằng số không. Làm thế nào tôi có thể làm điều này?


Câu trả lời:


343

Khá đơn giản:

Key = i.ToString("D2");

Dlà viết tắt của "số thập phân", 2cho số chữ số cần in.


7
nếu bạn sử dụng, string.Format("D2", value)bạn sẽ nhận được D2đầu ra. cái này không hoạt động. Chúng ta phải sử dụng "{0:00}"trong trường hợp này.
v.oddou

41
Bạn nên sử dụng string.Format("{0:D2}", value)thay thế. Chỉ cần nói rằng string.Format("D2", ...)sẽ không thay thế bất cứ điều gì cho dù bạn không có người giữ chỗ.
infinitepanda

5
@infinitypanda nhận ra rằng điều này sẽ chỉ hoạt động khi valuelà một int. Nếu valuelà một đôi, chẳng hạn, nó sẽ phải làstring.Format("{0:00}", value)
derekantrican

nếu chúng ta đang nói về 'chữ số hàng đầu' tôi nghĩ câu trả lời sẽ là i.ToString ("00"); trong đó "00" đại diện cho các số 0 đứng đầu .. bạn có thể tăng số tiền này càng nhiều càng tốt.
Dedan


72

Nếu bạn muốn giữ chiều rộng cố định, ví dụ 10 chữ số, hãy làm như thế này

Key = i.ToString("0000000000");

Thay thế bằng nhiều chữ số như bạn muốn.

i = 123sau đó sẽ dẫn đến Key = "0000000123".


63

Vì chưa ai đề cập đến điều này, nếu bạn đang sử dụng C # phiên bản 6 trở lên (tức là Visual Studio 2015) thì bạn có thể sử dụng phép nội suy chuỗi để đơn giản hóa mã của mình. Vì vậy, thay vì sử dụng string.Format(...), bạn chỉ có thể làm điều này:

Key = $"{i:D2}";

33

sử dụng:

i.ToString("D10")

Xem Int32.ToString (MSDN) và Chuỗi định dạng số chuẩn (MSDN).

Hoặc sử dụng String.PadLeft. Ví dụ,

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

Sẽ dẫn đến 0000000321. Mặc dù String.PadLeftsẽ không làm việc cho số âm.

Xem String.PadLeft (MSDN).


4
Tôi đoán điều đó sẽ làm bạn khó chịu khi bạn cố gắng sử dụng nó với các số âm.
Mario

Cảm ơn - Tôi đã sử dụng cái thứ hai. Tôi đã bỏ qua ".ToString ()" - nó vẫn hoạt động.
Sunsetquest

14

Thông thường String.Format ("format", object) thích hợp hơn object.ToString ("format"). Vì thế,

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

thích hơn là

Key = i.ToString("000000");

4
Có, như @cja hỏi, tại sao nó lại thích hợp hơn? Và tôi không tranh cãi với lời khẳng định, tôi muốn biết tại sao.
Christopher King

Cú pháp đầu tiên "cảm thấy" chính xác hơn, có thể dự đoán và rõ ràng hơn. Và nó sẽ được nêu rõ hơn là Key = String.Format ("{0: 00000}", 15); đang được so sánh với Key = i.ToString ("000000"); Với cú pháp đầu tiên, tôi khá chắc chắn rằng tôi biết chính xác kết quả mà tôi sẽ nhận được và nếu tạm biệt tôi là một ký tự, tôi biết chính xác những gì cần thay đổi (chuỗi định dạng. sở thích cá nhân về mặt cảm xúc, được hỗ trợ một cách yếu ớt bởi một lý do nửa hợp lý gần như hợp lý ;-) Vậy là đã quyết định rồi sao?
Nhà phát

13

Thử:

Key = i.ToString("000000");

Tuy nhiên, cá nhân tôi sẽ thấy nếu bạn không thể sắp xếp trực tiếp vào số nguyên, thay vì đại diện chuỗi.


7

Đối với các chuỗi nội suy:

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

3

Ở đây tôi muốn không giới hạn ở 4 chữ số như nếu nó là 1 thì nó sẽ hiển thị là 0001, nếu nó 11 thì nó sẽ hiển thị là 0011..Bowow là mã.

        reciptno=1;//Pass only integer.

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

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

Tôi đã triển khai mã này để tạo số tiền nhận.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.