Once every while somebody asks how to calculate how many characters to allocate when building a string representation of an integer. This is actually a very easy problem.. when you know your maths.

The answer is simply to use logarithms!

floor(log10(number) + 1)

You tend to think of logarithms as the inverse function of exponentiation. For instance 10 to the power 2 renders a result of 100. The 10th logarithm of 100 results in 2. As we all know from our most basic maths lessons when you raise 10 to the `n`

th power you get a string that is '1' followed with n repetitions of '0'. So we know that the length of 10 to the power `n`

is always `n + 1`

characters long.

I won't bore you with a further maths lesson into how natural logarithms work but the bottom line is we can generalise all numbers to `i * (base ^ n)`

where `^`

is the exponentiation operator. This is also why we need to floor since `log(22) + 1`

will not return a whole integer.

We then employ the formula for calculating the logarithm of a number in any given base to this process and we result in the following generalised expression.

floor(log(number) / log(base) + 1)