Question

I need to have a string, based on an integer, which should always have 5 digits.

Example:

myInteger = 999
formatedInteger = "00999"

What is the best way of doing this in classic ASP?

Was it helpful?

Solution

You can use string manipulation functions for this.

This assumes classic ASP with VBScript (original version of the answer).

Const NUMBER_DIGITS = 5

Dim myInteger
Dim formatedInteger

myInteger = 999
formatedInteger = Right(String(NUMBER_DIGITS, "0") & myInteger, NUMBER_DIGITS)

Here an optimized version, wrapped in a function, offering variable width padding:

Const NUMBER_PADDING = "000000000000" ' a few zeroes more just to make sure

Function ZeroPadInteger(i, numberOfDigits)
  ZeroPadInteger = Right(NUMBER_PADDING & i, numberOfDigits)
End Function

' Call in code:

strNumber = ZeroPadInteger(myInteger, 5)

OTHER TIPS

Something like this is what I've seen most of the time:

function PadNumber(number, width)
   dim padded : padded = cStr(number)

   while (len(padded) < width)
       padded = "0" & padded
   wend

   PadNumber = padded
end function

PadNumber(999, 5) '00999

Try this for a one-liner (well, two with error prevention):

function padZeroDigits(sVariable, iLength)
    if (iLength <= len(sVariable)) then padZeroDigits = sVariable : exit function : end if
    padZeroDigits = string(iLength - len(sVariable),"0") & sVariable
end function

Really, you should ask yourself why you might want this.

If this is for display purposes then it's probably best to apply a string formatting function (there will be one) to your integer, at the point of display.

On the other hand, if you need it for internal processing, i.e. you're always expecting five digits in a loop or whatever, but you're not expecting to do arithmetic on the value, then convert the integer to a string first and then do any processing.

In short, convert the integer variable to a string and store in a new variable, then use that.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top