How to find length of digits in an integer? How to find length of digits in an integer? python 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 mathdigits = int(math.log10(n))+1

To also handle zero and negative numbers

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

You'd 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 looptimeit len(str(2**8))1000000 loops, best of 3: 1.1 µs per looptimeit 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 looptimeit math.log10(2**10000)1000000 loops, best of 3: 844 ns per looptimeit 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