17

I need to make a 40 digit counter variable. It should begin as 0000000000000000000000000000000000000001
and increment to
0000000000000000000000000000000000000002

When I use the int class, it cuts off all the zeros. Problem is I need to increment the number and then convert it to a string, with the correct number of leading zeros. The total size should be 40 digits. So if I hit 50 for example, it should look like this:

0000000000000000000000000000000000000050

How can I do that and retain the zeros?

blizz
  • 4,102
  • 6
  • 36
  • 60
  • 1
    You'll be needing to use something more like [BigInteger](http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx) rather than `int`, otherwise the increment will fail in short order. – HABO Jun 07 '12 at 15:58

5 Answers5

38

Use the integer and format or pad the result when you convert to a string. Such as

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

See Jeppe Stig Nielson's answer for a formatting option that I can also never remember.

Community
  • 1
  • 1
Anthony Pegram
  • 123,721
  • 27
  • 225
  • 246
  • 1
    @RhysW, no, it simply pads to the length you specify with the character also specified. It will not exceed that length. For example, "123".PadLeft(2, '0') will simply return "123" – Anthony Pegram Jun 07 '12 at 15:39
20

Try using

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

Of course, the int can never grow so huge as to fill out all those digit places (the greatest int having only 10 digits).

Jeppe Stig Nielsen
  • 60,409
  • 11
  • 110
  • 181
2

Just convert your string to int, perform the addition or any other operations, then convert back to string with adequate number of leading 0's:

// 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');
alfongad
  • 21
  • 2
2

I had to do something similar the other day, but I only needed two zeros. I ended up with

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

Not sure if it's fool proof but try

String.Format("{0:0000000000000000000000000000000000000000}", myInt)
Sapiens
  • 51
  • 4
0

You can use this too..

int number = 1;
string tempNumber = $"{number:00}";

result:

01