Saltar al contenido

¿Cómo redondear un número de coma flotante hasta un cierto decimal?

Verificamos de forma cada enunciados de nuestra página web con la meta de mostrarte en todo momento la información más veraz y certera.

Solución:

8.833333333339 (o 8.833333333333334, el resultado de 106.00/12) correctamente redondeado a dos decimales es 8.83. Matemáticamente, parece que lo que quieres es una función de techo. El de Python math el módulo se llama ceil:

import math

v = 8.8333333333333339
print(math.ceil(v*100)/100)  # -> 8.84

Respectivamente, las funciones de piso y techo generalmente asignan un número real al entero anterior más grande o al siguiente más pequeño que tiene cero lugares decimales, por lo que para usarlos para 2 lugares decimales, el número se multiplica primero por 102 (o 100) para desplazar el punto decimal y luego se divide por él para compensar.

Si no quiere usar el math módulo por alguna razón, puede usar esta implementación (mínimamente probada) que acabo de escribir:

def ceiling(x):
    n = int(x)
    return n if n-1 < x <= n else n+1

¿Cómo se relaciona todo esto con el enlace Calculadora de préstamos y pagos problema:

captura de pantalla de la salida de la calculadora de préstamos

A partir de la salida de muestra, parece que redondeado el pago mensual, que es lo que muchos llaman el efecto de la función de techo. Esto significa que cada mes un poco más de 112 del monto total se está pagando. Eso hizo que el pago final fuera un poco más pequeño de lo habitual, dejando un saldo impago restante de solo 8.76.

Habría sido igualmente válido utilizar el redondeo normal produciendo un pago mensual de 8.83 y un pago final ligeramente superior de 8.87. Sin embargo, en el mundo real, a las personas generalmente no les gusta que sus pagos aumenten, por lo que redondear cada pago es una práctica común; también devuelve el dinero al prestamista más rápidamente.

Esto es normal (y no tiene nada que ver con Python) porque 8.83 no se puede representar exactamente como un flotante binario, así como 1/3 no se puede representar exactamente en decimal (0.333333 ... ad infinitum).

Si desea garantizar una precisión absoluta, necesita el decimal módulo:

>>> import decimal
>>> a = decimal.Decimal("8.833333333339")
>>> print(round(a,2))
8.83

Quiere utilizar el módulo decimal pero también necesita especificar el modo de redondeo. He aquí un ejemplo:

>>> import decimal
>>> decimal.Decimal('8.333333').quantize(decimal.Decimal('.01'), rounding=decimal.ROUND_UP)
Decimal('8.34')
>>> decimal.Decimal('8.333333').quantize(decimal.Decimal('.01'), rounding=decimal.ROUND_DOWN)
Decimal('8.33')
>>> 

Puntuaciones y comentarios

No se te olvide dar recomendación a este tutorial si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *