How to Get the "Length" of an Integer or Float in Python
In Python, numeric types like integers (int) and floats (float) are not sequences, so they do not have a "length" in the same way that a string or a list does. Attempting to use the built-in len() function on a number will result in a TypeError. However, a common task is to find the number of digits in an integer or float.
The correct way to achieve this is to first convert the number into a string, and then you can find the length of that string. This guide will walk you through the process for both integers and floats, including how to handle negative signs and decimal points.
Understanding the Error: Why len() Fails on Numbers
The len() function is designed to work on objects that have a defined length, known as "sized" objects, which are typically sequences or collections (like strings, lists, tuples, and dictionaries). Numbers represent a single magnitude and are not collections.
Example of code causing the error:
my_number = 12345
# Incorrect: len() cannot be used on an integer.
length = len(my_number)
Output:
# Error: object of type 'int' has no len()
Getting the Length of an Integer
Basic Conversion
To get the number of digits in a positive integer, simply convert it to a string and then get the length of that string.
Solution:
my_int = 17635
# Convert the integer to a string, then get its length.
int_length = len(str(my_int))
print(f"The number of digits in {my_int} is: {int_length}")
Output:
The number of digits in 17635 is: 5
Handling Negative Integers
If you apply len(str()) to a negative number, the minus sign (-) will be included in the character count. To count only the digits, first get the absolute value of the number using abs().
Solution:
negative_int = -99999
# Without abs(), the minus sign is counted.
length_with_sign = len(str(negative_int))
print(f"Length including the sign: {length_with_sign}")
# ✅ Correct: Use abs() to ignore the sign.
length_without_sign = len(str(abs(negative_int)))
print(f"Length of digits only: {length_without_sign}")
Output:
# Length including the sign: 6
# Length of digits only: 5
Getting the Length of a Float
Including the Decimal Point
When you convert a float to a string, the decimal point (.) is included as a character.
Solution:
my_float = 17.635
# The decimal point is counted as a character.
float_length = len(str(my_float))
print(f"The total character length of {my_float} is: {float_length}")
Output:
# The total character length of 17.635 is: 6
Excluding the Decimal Point
To count only the digits in a float, you can remove the decimal point from the string representation using the .replace() method before getting the length.
Solution:
negative_float = -99.9922
# Combine abs() to handle the sign and .replace() to handle the decimal point.
float_as_str = str(abs(negative_float))
digits_only_str = float_as_str.replace('.', '')
digit_count = len(digits_only_str)
print(f"The number of digits in {negative_float} is: {digit_count}")
Output:
# The number of digits in -99.9922 is: 6
Creating Reusable Functions
For convenience, you can wrap this logic in reusable functions.
Solution:
def get_integer_digit_count(number: int) -> int:
"""Returns the number of digits in an integer, ignoring the sign."""
return len(str(abs(number)))
def get_float_digit_count(number: float) -> int:
"""Returns the number of digits in a float, ignoring the sign and decimal point."""
return len(str(abs(number)).replace('.', ''))
# Test the functions
print(f"Integer count for -9999: {get_integer_digit_count(-9999)}")
print(f"Float count for -99.9922: {get_float_digit_count(-99.9922)}")
Output:
# Integer count for -9999: 4
# Float count for -99.9922: 6
Conclusion
| To find the number of digits in... | The best solution is... | Example |
|---|---|---|
| A positive integer | Convert to string and get length | len(str(123)) |
| Any integer (ignoring sign) | Use abs() before converting | len(str(abs(-123))) |
| Any float (ignoring sign and decimal point) | Use abs() and str.replace() | len(str(abs(-12.3)).replace('.', '')) |
The len() function cannot be used directly on numeric types. The key is to always convert the number to a string first, and then manipulate that string to get the specific count you need.