Skip to content

Instantly share code, notes, and snippets.

@evbruno
Created June 9, 2017 14:59
Show Gist options
  • Save evbruno/c02a5ddc137e383fae8d05cac2395570 to your computer and use it in GitHub Desktop.
Save evbruno/c02a5ddc137e383fae8d05cac2395570 to your computer and use it in GitHub Desktop.
Conta simples para cálculo do financiamento SAC (parcelas decrescentes)
//: Playground - noun: a place where people can play
import UIKit
class CalculadoraFinanciamento : CustomDebugStringConvertible {
let valorFinanciado, amortizacao, jurosMensal: Double
init(_ valorImovel: Double, valorEntrada: Double, parcelas: Int, jurosMensal: Double) {
self.valorFinanciado = valorImovel - valorEntrada
self.amortizacao = Double(valorFinanciado) / Double(parcelas)
self.jurosMensal = jurosMensal
}
convenience init(_ valorImovel: Double, valorEntrada: Double, parcelas: Int, jurosAnual: Double) {
let jurosMensal = (pow((1 + jurosAnual/100.0), 1/12.0) - 1) * 100
self.init(valorImovel, valorEntrada: valorEntrada, parcelas: parcelas, jurosMensal: jurosMensal)
}
func parcela(_ numDaParcela: Int) -> ParcelaCalculada {
return ParcelaCalculada(valorFinanciado, jurosMensal: jurosMensal, amortizacao: amortizacao, numDaParcela: numDaParcela)
}
var debugDescription: String {
return String(format: "Valor financiado: %0.2f , jurosMensal: %0.3f , amortização: %0.2f", valorFinanciado, jurosMensal, amortizacao)
}
}
class ParcelaCalculada : CustomDebugStringConvertible {
let valorFinanciado, jurosMensal, saldoDevedor, valor, jurosSobreSaldo: Double
let numDaParcela: Int
init(_ valorFinanciado: Double, jurosMensal: Double, amortizacao: Double, numDaParcela: Int) {
self.valorFinanciado = valorFinanciado
self.jurosMensal = jurosMensal
self.numDaParcela = numDaParcela
self.saldoDevedor = Double(self.valorFinanciado) - amortizacao * Double(numDaParcela)
let mult = Double(numDaParcela - 1)
self.jurosSobreSaldo = (jurosMensal / 100.0 ) * (valorFinanciado - (mult * amortizacao))
self.valor = amortizacao + jurosSobreSaldo
}
var debugDescription: String {
return String(format: "Valor: %0.2f , numDaParcela: %02d , jurosSobreSaldo: %0.2f, saldoDevedor: %0.2f", valor, numDaParcela, jurosSobreSaldo, saldoDevedor)
}
}
let meuApto = CalculadoraFinanciamento(325000, valorEntrada: 50000, parcelas: 360, jurosAnual: 7.50)
//let meuApto2 = CalculadoraFinanciamento(325000, valorEntrada: 50000, parcelas: 360, jurosMensal: 0.60)
print(meuApto)
print(meuApto.parcela(1))
print(meuApto.parcela(2))
print(meuApto.parcela(3))
let total = (1...360).reduce(Double(0)) { acc, curr in acc + meuApto.parcela(curr).valor }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment