A función modf() de math, o módulo estándar para funcións matemáticas en Python, pódese usar para obter as partes enteiras e decimais dun número simultaneamente.
Vexa o seguinte artigo para divmod(), que obtén simultaneamente o cociente e o resto dunha división.
Obter partes enteiras e decimais sen módulo matemático
Ao aplicar int() a un tipo flotante de coma flotante obtense un valor enteiro co punto decimal truncado. Isto pódese usar para obter a parte enteira e a 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'>
Obter partes enteiras e decimais dun número simultaneamente con math.modf()
A función modf() do módulo matemático pódese usar para obter simultaneamente as partes enteiras e decimais dun número.
math.modf() devolve a seguinte tupla Teña en conta a orde, xa que a parte decimal aparece primeiro.
(decimal, integer)
import math
print(math.modf(1.5))
print(type(math.modf(1.5)))
# (0.5, 1.0)
# <class 'tuple'>
Cada unha pódese desempaquetar e asignar a unha variable separada do seguinte xeito. Tanto as partes enteiras como as decimais son de tipo flotante.
f, i = math.modf(1.5)
print(i)
print(f)
# 1.0
# 0.5
print(type(i))
print(type(f))
# <class 'float'>
# <class 'float'>
O signo será o mesmo que o signo do valor orixinal tanto para as partes enteiras como para as decimais.
f, i = math.modf(-1.5)
print(i)
print(f)
# -1.0
# -0.5
Aplicable aos tipos int. Neste caso, tanto as partes enteiras como as decimais son de tipo flotante.
f, i = math.modf(100)
print(i)
print(f)
# 100.0
# 0.0
O seguinte método pódese usar para comprobar se un tipo flotante é un número enteiro (é dicir, a parte decimal é 0) sen obter a parte decimal. Consulta o seguinte artigo.
float.is_integer()