Skip to content

Instantly share code, notes, and snippets.

@evbruno
Last active July 6, 2018 16:59
Show Gist options
  • Save evbruno/622aeeef8c7e9d9c6f3df21f0aba51d1 to your computer and use it in GitHub Desktop.
Save evbruno/622aeeef8c7e9d9c6f3df21f0aba51d1 to your computer and use it in GitHub Desktop.
CalculadoraFinanciamentoSAC
case class DadosFinanciamento(valorFinanciado: Double,
amortizacao: Double,
parcelas: Int,
jurosMensal: Double)
case class ParcelaCalculada(numDaParcela: Int,
valor: Double,
jurosSobreSaldo: Double,
saldoDevedor: Double) {
override def toString =
f"numDaParcela: $numDaParcela%02d valor: $valor%.2f jurosSobreSaldo: $jurosSobreSaldo%.2f saldoDevedor: $saldoDevedor%.2f"
}
object CalculadoraFinanciamentoSAC {
def jurosAnualParaMensal(jurosAnual: Double) = (Math.pow((1 + jurosAnual / 100.0), 1 / 12.0) - 1) * 100
def comJurosAnual(valorFinanciado: Double,
parcelas: Int,
jurosAnual: Double) = {
val jurosMensal = jurosAnualParaMensal(jurosAnual)
comJurosMensal(valorFinanciado, parcelas, jurosMensal)
}
def comJurosMensal(valorFinanciado: Double,
parcelas: Int,
jurosMensal: Double) = {
val amortizacao = valorFinanciado / parcelas.toDouble
new DadosFinanciamento(valorFinanciado, amortizacao, parcelas, jurosMensal)
}
def parcela(numDaParcela: Int, fin: DadosFinanciamento) = {
val jurosSobreSaldo = (fin.jurosMensal / 100.0) * (fin.valorFinanciado - ((numDaParcela - 1) * fin.amortizacao))
val saldoDevedor = fin.valorFinanciado - fin.amortizacao * numDaParcela
val valor = fin.amortizacao + jurosSobreSaldo
ParcelaCalculada(numDaParcela, valor, jurosSobreSaldo, saldoDevedor)
}
def parcelas(fin: DadosFinanciamento) =
(1 to fin.parcelas).map(parcela(_, fin)).toList
def totalDevido(fin: DadosFinanciamento) =
parcelas(fin).foldRight(0d)(_.valor + _)
}
// exemplo:
val fin = CalculadoraFinanciamentoSAC.comJurosAnual(180000, 360, 7.5)
val parcela1 = CalculadoraFinanciamentoSAC.parcela(1, fin)
val parcela2 = CalculadoraFinanciamentoSAC.parcela(2, fin)
val parcela3 = CalculadoraFinanciamentoSAC.parcela(3, fin)
val totalDev = CalculadoraFinanciamentoSAC.totalDevido(fin)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment