# python – How to find length of digits in an integer?

## python – How to find length of digits in an integer?

If you want the length of an integer as in the number of digits in the integer, you can always convert it to string like `str(133)` and find its length like `len(str(123))`.

Without conversion to string

``````import math
digits = int(math.log10(n))+1
``````

To also handle zero and negative numbers

``````import math
if n > 0:
digits = int(math.log10(n))+1
elif n == 0:
digits = 1
else:
digits = int(math.log10(-n))+2 # +1 if you dont count the -
``````

Youd probably want to put that in a function ðŸ™‚

Here are some benchmarks. The `len(str())` is already behind for even quite small numbers

``````timeit math.log10(2**8)
1000000 loops, best of 3: 746 ns per loop
timeit len(str(2**8))
1000000 loops, best of 3: 1.1 Âµs per loop

timeit math.log10(2**100)
1000000 loops, best of 3: 775 ns per loop
timeit len(str(2**100))
100000 loops, best of 3: 3.2 Âµs per loop

timeit math.log10(2**10000)
1000000 loops, best of 3: 844 ns per loop
timeit len(str(2**10000))
100 loops, best of 3: 10.3 ms per loop
``````

## All math.log10 solutions will give you problems.

math.log10 is fast but gives problem when your number is greater than 999999999999997. This is because the float have too many .9s, causing the result to round up.

The solution is to use a while counter method for numbers above that threshold.

To make this even faster, create 10^16, 10^17 so on so forth and store as variables in a list. That way, it is like a table lookup.

``````def getIntegerPlaces(theNumber):
if theNumber <= 999999999999997:
return int(math.log10(theNumber)) + 1
else:
counter = 15
while theNumber >= 10**counter:
counter += 1
return counter
``````