HOWTO · Python

Convertir un número de punto flotante en un entero en Python

Este artículo presenta cómo convertir un número de punto flotante en un entero en Python

En esta página

Para convertir un número de punto flotante en un entero en Python, usa la función integrada int() si quieres descartar la parte fraccionaria acercándote a cero. Si necesitas otra regla, usa math.ceil() para obtener el entero más pequeño mayor o igual que el valor, o math.floor() para obtener el entero más grande menor o igual que este. La biblioteca estándar también ofrece math.trunc() para truncar hacia cero. Elige la función cuyo comportamiento de redondeo se ajuste al cálculo: para valores negativos, estas funciones no siempre producen el mismo resultado.

Convertir un número de punto flotante en un entero con int()

Ejecuta este ejemplo:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

number = 25.49
print(int(number))
25

Para un valor fraccionario positivo, int() elimina la parte fraccionaria. Con un valor negativo, también trunca hacia cero: int(-1.5) da -1, no -2. Esto es truncamiento, no redondeo al entero más cercano. Si necesitas redondear al valor más cercano, usa una operación de redondeo en lugar de suponer que int() lo hará.

int() acepta un número de punto flotante, un entero y texto que represente un entero, como int("25"). El texto que contiene un punto decimal, como "25.49", no representa un entero y no se puede pasar directamente a int(). Primero convierte el texto decimal en un número de punto flotante y luego convierte ese valor si quieres truncarlo. Ten en cuenta el tipo de entrada: pasar un valor numérico de punto flotante y pasar una cadena son conversiones distintas.

Un literal de punto flotante también puede representarse de forma distinta a como está escrito en decimal. Por ejemplo, Python puede representar 1.9999999999999999 como 2.0; si después pasas ese valor ya representado a int(), obtienes el entero correspondiente a 2.0. int() no tiene una regla especial para dieciséis o más dígitos 9. La conversión opera sobre el valor de punto flotante que existe después de analizar el literal, así que un resultado cercano a un entero puede deberse tanto a la representación de punto flotante como al truncamiento.

Elegir truncamiento, techo o suelo con math

Usa el módulo math cuando quieras indicar explícitamente la regla. math.trunc() trunca hacia cero, igual que int() cuando recibe valores de punto flotante. math.ceil() devuelve el entero más pequeño mayor o igual que un valor. math.floor() devuelve el entero más grande menor o igual que este. La diferencia importa con valores negativos: al truncar -1.5 se obtiene -1, mientras que el suelo es -2 y el techo es -1. Con fracciones positivas, el truncamiento y el suelo llegan al mismo entero inferior, mientras que el techo sube al siguiente.

El siguiente ejemplo independiente compara valores positivos y negativos con las tres funciones de la biblioteca estándar.

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

import math

for number in (1.5, -1.5):
    print(number, math.trunc(number), math.ceil(number), math.floor(number))
1.5 1 2 1
-1.5 -1 -1 -2

Usa int() o math.trunc() cuando quieras eliminar la parte fraccionaria acercándote a cero; math.ceil() cuando el resultado no deba ser menor que el valor de entrada; y math.floor() cuando no deba ser mayor. Por ejemplo, al convertir una cantidad medida en unidades enteras, decide si la aplicación debe conservar solo las unidades completas, asignar siempre unidades suficientes o contar únicamente las unidades que caben por completo en la cantidad. Indicar esa regla en el código facilita su revisión y evita depender de una dirección de redondeo no deseada.

Todas estas funciones devuelven enteros de Python para entradas numéricas finitas habituales. Ninguna conserva la información fraccionaria. Si necesitas esa precisión en cálculos posteriores, conserva el valor de punto flotante original además del entero convertido. Para cantidades decimales que requieran aritmética decimal exacta, considera si te conviene usar una representación decimal antes de convertirlas: convertir un valor de punto flotante ya aproximado no recupera los dígitos decimales que se perdieron al representarlo.