domingo, 6 de enero de 2019

Cálculo de la cuota de un préstamo con Python



Función en Python para calcular las cuotas de un préstamo según el sistema francés, en el que las cuotas son fijas.

¿Qué es el sistema de amortización francés?

El sistema de amortización francés, es uno de los principales sistemas que se emplean a la hora de amortizar hipotecas. El sistema de amortización francés es aquel que se caracteriza por ser un sistema de amortización de cuotas constantes.

Debido a que las cuotas son constantes, cada mes el banco recibe los intereses en función del capital pendiente de amortizar. Por ello, durante los primeros años de la hipoteca, se paga una cantidad mayor de intereses que de capital y en cambio, durante el período final del préstamo, por pagar más capital e intereses menores.


from decimal import Decimal

def GetValorDeCuotaFija(self, monto, tasa, cuotas, periodo=MENSUAL, limit_dec=None):
    """
    Retorna el valor actual de la cuota, según el método francés,
    en donde las cuotas son fijas. -> float(x)
 
    Formula = R = P [(i (1 + i)**n) / ((1 + i)**n – 1)].
    Donde:
    R = renta (cuota)
    P = principal (préstamo adquirido)
    i = tasa de interés
    n = número de periodos
    -> (Moneda valor, Moneda interes, Moneda monto)
    """
    tasa = tasa / Decimal(100)
    if periodo == DIARIO:
        tasa /= Decimal(30.4167)
    elif periodo == SEMANAL:
        tasa /= Decimal(4.34524)
    if periodo == QUINCENAL:
        tasa /= Decimal(2.0)
    elif periodo == ANUAL:
        tasa *= 12

    # Si no se especifica una tasa, se pone un número casi imperceptible para
    # evitar que la formula lanze una excepción de división por cero.
    if not tasa:
        tasa = Decimal(0.00000000001)
    # Furmula para el cálculo según el sistema francés.
    valor = monto * ( (tasa * ((1 + tasa)**cuotas)) / (((1 + tasa)**cuotas) - 1) )
    interes = valor - monto
    if limit_dec:
        return (round(valor, limit_dec), round(interes, limit_dec), round(monto, limit_dec))
    return (valor, interes, monto)


¿Te diste cuenta que hemos utilizado la clase Decimal del módulo decimal, en vez de un objeto float? La razón principal es la precisión. En este artículo te cuento acerca de las diferencias entre Decimal y float.

Enlaces externos:
Sistema de amortización francés









4 comentarios:

  1. hola un pregunta, donde dice decimal hay que añadir algún float?

    ResponderBorrar
  2. Hola, disculpa. Debes importar la clase "Decimal" desde la libería estandard "decimal".

    Ejemplo: from decimal import Decimal.

    Saludos.

    ResponderBorrar
  3. Escribe un programa en Python, para aprobar el préstamo bancario para la compra de una casa. El programa debe preguntar el valor de la casa a comprar, el salario y la cantidad de años a pagar.

    El valor de la cuota mensual no puede ser superior a 30% del salario. Calcula el valor de la cuota dividiendo el valor de la casa a comprar por el número de meses a pagar.

    Me ayudan a resolver ese ejercicio

    ResponderBorrar