2012-06-07 5 views
11

Tôi cần tạo biến số đếm 40 chữ số. Nó nên bắt đầu như 0000000000000000000000000000000000000001
và increment để
0000000000000000000000000000000000000002C# - số gia số và giữ số 0 ở phía trước

Khi tôi sử dụng lớp int, nó cắt đứt tất cả các số không. Vấn đề là tôi cần phải tăng số lượng và sau đó chuyển đổi nó thành một chuỗi, với số lượng chính xác của số không đứng đầu. Tổng kích thước phải là 40 chữ số. Vì vậy, nếu tôi trúng 50 ví dụ, nó sẽ giống như thế này:

0000000000000000000000000000000000000050

Làm thế nào tôi có thể làm điều đó và giữ lại số không?

+1

Bạn sẽ cần phải sử dụng một cái gì đó giống như [BigInteger] (http://msdn.microsoft.com/en -us/library/system.numerics.biginteger.aspx) thay vì 'int', nếu không thì số gia tăng sẽ thất bại theo thứ tự ngắn. – HABO

Trả lời

26

Sử dụng số nguyên và định dạng hoặc đệm kết quả khi bạn chuyển đổi thành chuỗi. Chẳng hạn như

int i = 1; 
string s = i.ToString().PadLeft(40, '0'); 

Xem Jeppe Stig Nielson's answer để biết tùy chọn định dạng mà tôi cũng không bao giờ nhớ.

+1

đối số theo thứ tự ngược lại ... – Tigran

+0

Đã sửa chữa và cảm ơn bạn. –

+0

@RhysW, không, nó chỉ đơn giản là miếng đệm theo chiều dài bạn chỉ định với các ký tự cũng được chỉ định. Nó sẽ không vượt quá chiều dài đó. Ví dụ: "123" .PadLeft (2, '0') sẽ chỉ trả về "123" –

19

Hãy thử sử dụng

int myNumber = ...; 
string output = myNumber.ToString("D40"); 

Tất nhiên, int không bao giờ có thể phát triển quá lớn như điền tất cả những nơi chữ số (lớn nhất int chỉ có 10 chữ số).

1

Chỉ cần chuyển đổi chuỗi của bạn để int, thực hiện việc bổ sung hoặc bất kỳ các hoạt động khác, sau đó chuyển đổi trở lại chuỗi với số lượng đầy đủ về số 0 đầu của:

// 39 zero's + "1" 
string initValue = new String('0', 39) + "1"; 

// convert to int and add 1 
int newValue = Int32.Parse(initValue) + 1; 

// convert back to string with leading zero's 
string newValueString = newValue.ToString().PadLeft(40, '0'); 
0

tôi phải làm một cái gì đó tương tự như những ngày khác, nhưng tôi chỉ cần hai số không. Tôi đã kết thúc với

string str = String.Format("{0:00}", myInt); 

Không chắc nếu nó đánh lừa bằng chứng nhưng thử

String.Format("{0:0000000000000000000000000000000000000000}", myInt)