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:
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 1⁄12 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.