2010-01-11 23 views
6

Tôi có số được lưu trữ trong cơ sở dữ liệu và một số có số không là chữ số đầu tiên vì chúng luôn cần phải có một số chữ số nhất định. Tôi có một hộp văn bản có số này gõ vào nó, vì vậy tôi làm một Convert.ToInt32 (TextBox.Text), mà loại bỏ số không bắt đầu nếu nó có một. Có ai có bất kỳ ý tưởng làm thế nào tôi có thể giữ số không, hoặc thêm nó vào đầu sau khi chuyển đổi?Convert.ToInt32 - Keep Preceding Zero

+4

Nếu bạn muốn có số 0 đứng đầu, chắc chắn bạn không muốn chuyển sang Int32? Tại sao không giữ nó như một chuỗi? –

+0

tôi không nghĩ rằng bạn có thể giữ chúng. nhưng bạn có thể định dạng int được chuyển đổi để hiển thị lại chúng: http://msdn.microsoft.com/en-us/library/dd260048.aspx –

+0

@Matt Vì kiểu cơ sở dữ liệu là một Int – Grace

Trả lời

26

Cách duy nhất để giữ các số 0 trước đó là không chuyển đổi số đó thành một số.

Số không có bất kỳ số 0 trước nào vì nó chỉ chứa giá trị, chứ không phải biểu diễn chuỗi của giá trị.

Nếu bạn muốn chuyển đổi nó vào một số và sau đó chuyển đổi nó trở thành một chuỗi, tái tạo lại zero trước, bạn có thể sử dụng một định dạng tùy chỉnh:

string formatted = number.ToString("00000"); 

Hoặc đối với một số động của các chữ số:

string formatted = number.ToString(new String('0', numberOfDigits)); 
+0

+1 để giải thích cả hai tùy chọn, vì giải pháp tốt nhất phụ thuộc vào bản chất của dữ liệu (imo) – Thorarin

+2

Không phải là 'number.ToString(). PadLeft (numberOfDigits, '0')' dễ dàng hơn? Ít nhất dễ đọc hơn tôi sẽ nói ... :) – Svish

+2

Tôi lo lắng về các giá trị âm khi làm đệm như thế này. Ví dụ, tùy chọn PadLeft của bạn sẽ trông như sau: "00-9" thay vì -009. – Codesleuth

9

Nếu bạn cần giữ số đệm, hãy giữ giá trị dưới dạng Chuỗi. Số nguyên không thể giữ thông tin về số 0 đệm vì chúng đơn giản biểu diễn một số.

Nếu bạn cần xác thực số đã nhập, hãy sử dụng Int32.TryParse hoặc khớp với giá trị trên regular expression (như "^\d+$").

Edit: Ngoài Guffa's answer, bạn có thể sử dụng "D" (MSDN) để định dạng một số quy định của ký tự (với zero padding, nếu cần thiết):

string formatted = number.ToString("D5"); // 13 -> 00013 
+0

+1, để gợi ý về định dạng thập phân ("D"). Vì câu hỏi xác định 'Convert.ToInt32()', đây là phương pháp ưa thích cá nhân của tôi để đệm giá trị. – Codesleuth

0

Bạn phải sử dụng các định dạng chuỗi cho giữ hàng đầu zero:

int fooValue = Convert.ToInt32(TextBox.Text) 
//operations with foo Value 
string formatValue = fooValue.ToString("#0000"); 
2

cách Tôi sẽ làm điều đó là khi số được đưa trở lại cơ sở dữ liệu thay vì cho nó một số int sử dụng một string bằng cách sử dụng myint.ToString("0000000"). Với số 0 là tổng chiều dài của số độn.

0

Điều này cũng sẽ hiệu quả.

123.ToString().PadLeft(5, '0'); // 0
+0

Như nhận xét về bình luận của Svish, điều này sẽ tạo ra kết quả lạ với các số nguyên âm. – Codesleuth