Cómo fijar la precisión numérica en Python y redondear

目次

1. Introducción

Python es un lenguaje de programación muy flexible para la manipulación de números, y la especificación de la cantidad de dígitos es un elemento importante para mantener la legibilidad y la consistencia de los datos. En este artículo, explicaremos los métodos para especificar la cantidad de dígitos de los números en Python. Incluye ejemplos concretos y consideraciones que pueden ser útiles incluso para principiantes en entornos profesionales, cubriendo contenido aplicable.

2. Básico para especificar la cantidad de dígitos de números en Python | Control de la visualización de decimales

¿Por qué es importante especificar la cantidad de dígitos?

La especificación de la cantidad de dígitos de los números es útil en los siguientes casos:

  • Mejora de la legibilidad de los datos: especialmente en datos financieros o resultados estadísticos, donde se alinean muchos números.
  • Uniformidad de la precisión: es necesario para mantener la consistencia de los datos al crear gráficos o informes.

Métodos básicos para especificar la cantidad de dígitos decimales

  1. format() Especificación de dígitos usando el método
# Mostrar hasta 2 decimales
   num = 123.456
   formatted = "{:.2f}".format(num)
   print(formatted)  # Salida: 123.46
  • "{:.2f}" especifica un formato que muestra hasta 2 decimales.
  1. Método conciso usando f-strings (Python 3.6 y posteriores)
# Mostrar hasta 2 decimales
   num = 123.456
   formatted = f"{num:.2f}"
   print(formatted)  # Salida: 123.46
  • format() permite obtener el mismo resultado que el método, con un código más corto.
  1. % método usando el formato (método heredado)
# Mostrar hasta 2 decimales
   num = 123.456
   formatted = "%.2f" % num
   print(formatted)  # Salida: 123.46
  • Aunque es un método heredado, se usa frecuentemente en bases de código antiguas.

Precauciones

  • format() y f-string solo formatean el número como cadena, sin modificar el valor numérico original.
  • Si se requieren cálculos con precisión, es necesario combinar adecuadamente procesos de redondeo o truncamiento.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

3. Especificación del número de dígitos de la parte entera | Diferenciación entre relleno con ceros y con espacios

Método de relleno con ceros

El relleno con ceros se usa al mostrar un número ajustado al número de dígitos especificado. Es útil principalmente para formatear IDs y códigos.

# Rellenar con ceros a 5 dígitos
num = 42
formatted = "{:05d}".format(num)
print(formatted)  # Salida: 00042

Alineación a la derecha o izquierda mediante relleno con espacios

El relleno con espacios se utiliza para alinear los datos de forma que sean más legibles.

# Mostrar con alineación a la derecha 5 dígitos
num = 42
formatted = "{:>5}".format(num)
print(formatted)  # Salida: "   42"

# Mostrar con alineación a la izquierda 5 dígitos
formatted = "{:<5}".format(num)
print(formatted)  # Salida: "42   "

Ejemplos de aplicación

  • Formato de ID de cliente y códigos de producto
  • Visualización formateada de datos de tabla (archivos CSV o salida en consola)

4. Cómo obtener la cantidad de dígitos de un número | Explicación por casos para enteros y decimales

Obtener la cantidad de dígitos de un entero

Para obtener la cantidad de dígitos de un entero, convierta el número a una cadena y obtenga su longitud.

# Obtener la cantidad de dígitos de un entero
num = 12345
length = len(str(abs(num)))
print(length)  # Salida: 5

Obtener la cantidad de dígitos de un decimal

Para obtener la cantidad de dígitos después del punto decimal, convierta el número a una cadena y divídalo por el punto decimal.

# Obtener la cantidad de dígitos decimales
num = 123.456
decimal_part = str(num).split('.')[1]
length = len(decimal_part)
print(length)  # Salida: 3

Precauciones

  • Es importante incorporar manejo de errores, ya que si no hay parte decimal se producirá un error.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

5. Ejemplos de aplicación | Escenarios concretos donde la especificación de dígitos es útil

El método para especificar la cantidad de dígitos de los números en Python se utiliza ampliamente en tareas reales y proyectos. Aquí presentamos algunos escenarios concretos y sus ejemplos de implementación.

Formateo de datos financieros

En los datos financieros, es importante alinear la cantidad de decimales de las monedas para mejorar la legibilidad de los datos.

# Ejemplo de formato de datos financieros
amount = 12345.678
formatted = f"¥{amount:,.2f}"
print(formatted)  # Salida: ¥12,345.68
  • Punto:
  • :,.2f se usa para especificar el separador de miles y el formato con 2 decimales.
  • Al agregar el símbolo de la moneda como cadena, se mejora la legibilidad.

Salida de resultados de cálculos científicos

En el ámbito científico, a veces se requiere uniformizar la precisión de los resultados de cálculo.

# Ejemplo de cálculo científico
result = 0.123456789
formatted = f"{result:.5f}"
print(formatted)  # Salida: 0.12346
  • Punto:
  • Al especificar la cantidad de decimales, se unifica la precisión de los resultados.
  • También es útil al exportar los resultados a CSV o informes.

Formato de datos de registro e ID

En los registros del sistema y los ID utilizados en bases de datos, es común formatearlos mediante especificación de dígitos, como el relleno con ceros.

# Ejemplo de formato de ID de registro
log_id = 42
formatted_id = f"LOG-{log_id:05d}"
print(formatted_id)  # Salida: LOG-00042
  • Punto:
  • Al formatear los ID y números de registro con una longitud fija, se mantiene la consistencia.

Ejemplo de integración con bibliotecas de Python

En bibliotecas de procesamiento de datos como Pandas o NumPy, aplicar la especificación de dígitos a los números facilita el formateo de los datos.Ejemplo usando Pandas:

import pandas as pd

# Creación del DataFrame
data = {'monto': [12345.678, 9876.543, 456.789]}
df = pd.DataFrame(data)

# Formatear a 2 decimales
df['monto'] = df['monto'].map(lambda x: f"{x:.2f}")
print(df)
  • Ejemplo de salida:
Monto
  0  12345.68
  1   9876.54
  2    456.79
  • Punto:
  • .map() se usa para formatear en bloque los valores dentro del DataFrame.
  • Al unificar la cantidad de decimales, el formateo de los datos se vuelve más sencillo.

6. Métodos y consideraciones para redondear números en Python

Python ofrece funciones útiles para redondear y truncar números. Aquí explicamos los métodos más usados y sus consideraciones.

round() función para redondear

round() función realiza redondeo al número de decimales especificado.Uso básico

# Redondear a 2 decimales
num = 123.456
rounded = round(num, 2)
print(rounded)  # Salida: 123.46
  • Primer argumento: número a redondear
  • Segundo argumento: número de decimales a mantener

Redondeo de enteros

# Redondeo a la parte entera (sin decimales)
num = 123.456
rounded = round(num)
print(rounded)  # Salida: 123

Consideraciones

  • round() adopta el redondeo bancario (redondeo al número par), por lo que su comportamiento de redondeo puede diferir de lo esperado.
print(round(2.5))  # Salida: 2
  print(round(3.5))  # Salida: 4
  • Si desea evitar este comportamiento, use el módulo decimal (ver más adelante).

math.floor() función para truncar

math.floor() función trunca el número por debajo del punto decimal.Uso básico

import math

# Redondear hacia abajo
num = 123.456
floored = math.floor(num)
print(floored)  # Salida: 123

Truncado con especificación de decimales

# Mantener hasta 2 decimales y redondear hacia abajo
num = 123.456
floored = math.floor(num * 100) / 100
print(floored)  # Salida: 123.45
  • Si necesita controlar la cantidad de decimales, debe escalar el número (multiplicar/dividir).

math.ceil() función para redondear al alza

math.ceil() función redondea el número hacia arriba en el punto decimal.Uso básico

import math

# Redondear hacia arriba después del punto decimal
num = 123.456
ceiled = math.ceil(num)
print(ceiled)  # Salida: 124

Redondeo al alza con especificación de decimales

# Mantener hasta 2 decimales y redondear hacia arriba
num = 123.451
ceiled = math.ceil(num * 100) / 100
print(ceiled)  # Salida: 123.46

decimal módulo para redondeo de alta precisión

decimal módulo se usa para reducir el redondeo y los errores de cálculo de los números de punto flotante.Uso básico

from decimal import Decimal, ROUND_HALF_UP

# Redondear a 2 decimales
num = Decimal("123.455")
rounded = num.quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)
print(rounded)  # Salida: 123.46

Ventajas

  • Es adecuado para cálculos financieros y científicos donde la precisión es crucial.
  • ROUND_HALF_UP se pueden especificar explícitamente métodos de redondeo.

Puntos clave para elegir entre funciones

FunciónUsoConsideraciones
round()Redondeo generalRedondeo al número par (redondeo bancario) es el predeterminado
math.floor()TruncadoRequiere escalado
math.ceil()Redondeo al alzaRequiere escalado
decimal móduloCuando se requieren cálculos de alta precisión o redondeo personalizadoSe necesita especificar el modo de redondeo adecuado

Ejemplos de aplicación | Procesamiento de datos usando redondeo

Formateo de datos de ventas

sales = [1234.567, 987.654, 456.789]
rounded_sales = [round(sale, 2) for sale in sales]
print(rounded_sales)  # Salida: [1234.57, 987.65, 456.79]

Reducción de errores de cálculo

from decimal import Decimal

num1 = Decimal("0.1")
num2 = Decimal("0.2")
result = num1 + num2
print(result)  # Salida: 0.3
  • Se pueden eliminar completamente los errores de cálculo de los números de punto flotante.

7. Resumen

Hasta ahora, hemos explicado diversas formas de especificar la cantidad de dígitos de números en Python y ejemplos prácticos relacionados. En esta sección, revisaremos brevemente el contenido del artículo y organizaremos los puntos clave.

Fundamentos para especificar la cantidad de dígitos en Python

  • Especificación de la cantidad de dígitos después del punto decimal:
  • format() método, f-string, % formato para especificar fácilmente la cantidad de dígitos después del punto decimal.
  • Ejemplo: f"{123.456:.2f}" → Salida: 123.46
  • Especificación de la cantidad de dígitos en la parte entera:
  • Relleno con ceros (ejemplo: "{:05d}".format(42) → Salida: 00042) o rellenar con espacios para alinear el formato.

Métodos de aplicación avanzados

  • Formateo de datos financieros:
  • El formato con símbolos de moneda y separadores de miles mejora la legibilidad de los datos.
  • Ejemplo: f"¥{12345.678:,.2f}" → Salida: ¥12,345.68
  • Cálculo científico y gestión de precisión:
  • Al alinear la cantidad de dígitos después del punto decimal, los resultados de cálculo pueden organizarse de forma más clara.
  • Formato de IDs y números de registro:
  • Para mantener la consistencia, se utilizan longitudes fijas (ejemplo: LOG-00042).
  • Integración con bibliotecas de procesamiento de datos:
  • Al usar la especificación de dígitos en Pandas o NumPy, el formateo y la salida de conjuntos de datos se simplifican.

Redondeo y truncamiento de números

  • Función round():
  • Realiza redondeo al número más cercano y permite especificar la cantidad de dígitos.
  • Nota: se debe prestar atención al redondeo bancario (redondeo al número par).
  • Funciones math.floor() y math.ceil():
  • Permiten operaciones de truncado y redondeo hacia arriba, y también admiten especificación de dígitos mediante escalado.
  • Módulo decimal:
  • Se utiliza en situaciones que requieren cálculos de alta precisión y redondeo personalizable.

Precauciones

  • Diferencia entre el resultado del cálculo y el formato de visualización:
  • Normalmente, la especificación de dígitos solo afecta la apariencia y no modifica el valor numérico original.
  • Prevención de errores:
  • Es importante incorporar manejo de errores al obtener la cantidad de dígitos después del punto decimal o al formatear.

Conclusión

Las operaciones de especificación de dígitos con Python son muy útiles en el trabajo y proyectos. El formateo de datos, la mejora de la legibilidad visual, la gestión de precisión, entre otros, pueden aplicarse en diversos campos. Utilice los métodos y ejemplos presentados en el artículo en su trabajo práctico.

Continuaremos ofreciendo artículos que apoyen el aprendizaje y la práctica de Python. Si tiene futuros desafíos o preguntas, ¡no dude en preguntar!