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
Trả lời
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));
+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
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
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
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
+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
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");
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.
Điều này cũng sẽ hiệu quả.
123.ToString().PadLeft(5, '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
- 1. SVN delete --keep-local
- 2. NSURLConnection and keep-alive
- 3. sử dụng Better int.Parse hoặc Convert.ToInt32
- 4. Convert.ToInt32 (String) trên String.Empty so với Null
- 5. Ruby Nil và Zero
- 6. Division trả về zero
- 7. phận Integer luôn zero
- 8. mmap với/dev/zero
- 9. HTTPRequest.Files.Count Never Equals Zero
- 10. Xóa Zero Từ HIGHCHART
- 11. MySQL Xóa Trailing Zero
- 12. Zero size struct
- 13. JSTL tiêu cực zero
- 14. Sự khác nhau chính giữa Convert.ChangeType hoặc Convert.ToInt32 là gì?
- 15. Lpad với zero trong VBScript
- 16. 0E30 không phải là ZERO
- 17. jQuery Animate Padding to Zero
- 18. PostgreSQL lượt rỗng vào zero
- 19. Tại sao mẫu OCaml `zero -> zero` dường như phù hợp với mọi thứ?
- 20. HTTP Keep Alive và TCP tiếp tục hoạt động
- 21. NSURLConnection bỏ qua thời gian chờ Keep-Alive?
- 22. Cách tắt Keep-Alive trên mỗi Danh bạ
- 23. Keep-alive hoạt động như thế nào với ThreadPoolExecutor?
- 24. Tomcat, HTTP Keep-Alive và HttpsUrlConnection của Java
- 25. "Connection: Keep-Alive" trong phản hồi của máy chủ
- 26. C++ làm tròn số đi từ zero
- 27. trận Zero-chiều dài trong Java Regex
- 28. Leading zero trong CSV trên mở lại
- 29. C# Process.MainWindowHandle luôn trả IntPtr Zero,
- 30. MPI đếm zero thường có giá trị
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? –
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 –
@Matt Vì kiểu cơ sở dữ liệu là một Int – Grace