JSFiddle - React, Tailwind, and code Playground
HTML
<label for="input_loan_amount">Loan amount:</label>
<input type="text" id="input_loan_amount" name="input_loan_amount" value="250000">
<br>
<label for="input_loan_amount">Fixed price:</label>
<input type="text" id="input_installment" name="input_installment" value="3499">
<br>
<label for="input_loan_amount">Monthly interest (%):</label>
<input type="text" id="input_monthly_interest" name="input_monthly_interest" value="0.41">
<br>
<label for="input_loan_amount">Initial fee:</label>
<input type="text" id="input_initial_fee" name="input_initial_fee" value="3499">
<br>
<label for="input_monthly_fee">Monthly fee:</label>
<input type="text" id="input_monthly_fee" name="input_monthly_fee" value="99">
<br>
<br>
<b>Duration:</b><i id="Duration"></i><br>
<b>Saldo Primo:</b><i id="SaldoPrimo"></i><br>
<b>Saldo Ultimo:</b><i id="SaldoUltimo"></i><br>
<b>RunningAdm:</b><i id="RunningAdm"></i><br>
<b>RunningInterest:</b><i id="RunningInterest"></i><br>
<b>TotalCost:</b><i id="TotalCost"></i><br>
<b>Totalpay:</b><i id="Totalpay"></i><br>
<b>FixedPrice:</b><i id="FixedPrice"></i><br>
<b>ExtraOrdinaryInstallment:</b><i id="ExtraOrdinaryInstallment"></i><br>
<br>
<button type="button" onclick="calculate()">Calculate</button>
JavaScript
function calculate()
{
let Duration=0;
let SaldoPrimo=0;
let SaldoUltimo=0;
let MonthInterestAmount = 0;
let RunningAdm = 0;
let RunningInterest = 0;
let ExtraOrdinaryInstallment = 0;
LoanAmount=parseFloat($('#input_loan_amount').val());
FixedPrice=parseFloat($('#input_installment').val());
// User inputs interest rate in percent (e.g. 0.41), so we need to divide by 100
MonthInterest = (1/100) * parseFloat($('#input_monthly_interest').val());
OpeningFee=parseFloat($('#input_initial_fee').val());
MonthFee=parseFloat($('#input_monthly_fee').val());
SaldoPrimo=LoanAmount+OpeningFee;
console.log({ LoanAmount, FixedPrice, MonthInterest, OpeningFee, MonthFee, SaldoPrimo })
do
{
Duration++;
MonthInterestAmount=SaldoPrimo*MonthInterest;
SaldoUltimo=SaldoPrimo+MonthFee+MonthInterestAmount-FixedPrice;
console.log( { Duration, SaldoPrimo, MonthFee, MonthInterestAmount, FixedPrice, SaldoUltimo })
RunningAdm=RunningAdm+MonthFee;
RunningInterest=RunningInterest+MonthInterestAmount;
SaldoPrimo=SaldoUltimo;
if (Duration>400)
{
break;
}
SaldoTest=SaldoUltimo+(SaldoPrimo*MonthInterest)+MonthFee;
console.log( { Duration, SaldoTest, SaldoUltimo })
}
while (!(SaldoTest < FixedPrice));
if (SaldoUltimo>0)
{
MonthInterestAmount=SaldoPrimo*MonthInterest;
Duration++;
RunningAdm=RunningAdm+MonthFee;
RunningInterest=RunningInterest+MonthInterestAmount;
ExtraOrdinaryInstallment=MonthInterestAmount+MonthFee+SaldoUltimo;
$('#result').html((MonthInterestAmount+MonthFee+SaldoUltimo));
}
SaldoPrimo=0;
SaldoUltimo=0;
let TotalCost=RunningAdm+RunningInterest+OpeningFee;
let Totalpay=LoanAmount+TotalCost;
$('#Duration').html(Duration);
$('#SaldoPrimo').html(SaldoPrimo);
$('#SaldoUltimo').html(SaldoUltimo);
...