La función modf() de math, el módulo estándar para funciones matemáticas en Python, puede utilizarse para obtener las partes enteras y decimales de un número simultáneamente.
Véase el siguiente artículo para divmod(), que obtiene simultáneamente el cociente y el resto de una división.
Obtener partes enteras y decimales sin módulo matemático
Al aplicar int() a un tipo float de punto flotante se obtiene un valor entero con el punto decimal truncado. Esto puede utilizarse para obtener la parte entera y la parte decimal.
a = 1.5
i = int(a)
f = a - int(a)
print(i)
print(f)
# 1
# 0.5
print(type(i))
print(type(f))
# <class 'int'>
# <class 'float'>
Obtenga las partes enteras y decimales de un número simultáneamente con math.modf()
La función modf() del módulo matemático puede utilizarse para obtener simultáneamente las partes enteras y decimales de un número.
math.modf() devuelve la siguiente tupla Nótese el orden, ya que la parte decimal va primero.
(decimal, integer)
import math
print(math.modf(1.5))
print(type(math.modf(1.5)))
# (0.5, 1.0)
# <class 'tuple'>
Cada una de ellas puede ser descompuesta y asignada a una variable separada de la siguiente manera Tanto las partes enteras como las decimales son de tipo float.
f, i = math.modf(1.5)
print(i)
print(f)
# 1.0
# 0.5
print(type(i))
print(type(f))
# <class 'float'>
# <class 'float'>
El signo será el mismo que el del valor original tanto para las partes enteras como para las decimales.
f, i = math.modf(-1.5)
print(i)
print(f)
# -1.0
# -0.5
Aplicable a los tipos int. En este caso, tanto la parte entera como la decimal son tipos float.
f, i = math.modf(100)
print(i)
print(f)
# 100.0
# 0.0
El siguiente método puede utilizarse para comprobar si un tipo float es un entero (es decir, la parte decimal es 0) sin obtener la parte decimal. Véase el siguiente artículo.
float.is_integer()