Simulateur de crédit
Simulateur de mensualités d'emprunt et tableau d'amortissement.
Modifier n'importe quelle valeur pour mettre à jour la mensualité.
Le tableau d'amortissement est vidé dès qu'une valeur est changée.
Afficher la formule
mensualité = montant × (taux/100)/12) / (1−(1+(taux/100)/12)(- nb mois)
Javascript du tableau d'amortissement
((__) => {
 'use strict';
 const nf = new Intl.NumberFormat("fr-FR", {
 style: "currency",
 currency: "EUR",
 maximumFractionDigits: 2
 });
 let root = __('#calculator'),
 amount = root.find('#amount'),
 rate = root.find('#interest-rate'),
 duration = root.find('#duration'),
 payment = root.find('#monthly-payments'),
 rates = root.find('#rate-payments'),
 total = root.find('#total-payments'),
 header = '<thead>' +
 '<tr class="flex no-fit">' +
 '<th scope="col" class="xs-2 s-1 text-align-center">Mois</th>' +
 '<th scope="col" class="xs-3 s-3">Intérêts</th>' +
 '<th scope="col" class="xs-3 s-3">Capital</th>' +
 '<th scope="col" class="xs-4 s-5 pr-10">Reste dû</th>' +
 '</tr>' +
 '</thead>',
 caption = '<caption>%s en %s mensualités</caption>',
 line = '<tr class="flex no-fit">' +
 '<th class="xs-2 s-1 text-align-center" scope="row">%s</th>' +
 '<td class="xs-3 s-3">%s</td>' +
 '<td class="xs-3 s-3">%s</td>' +
 '<td class="xs-4 s-5 pr-s">%s</td>' +
 '</tr>',
 result = __('#amortization'),
 calc = () => {
 result.html(null);
 let a = amount.val(),
 r = rate.val(),
 d = duration.val(),
 calculate = r > 0
 ? (a * (r / 100) / 12) / (1 - Math.pow(1 + (r / 100) / 12, -d))
 : a / d;
 payment.val(!isNaN(calculate) ? nf.format(calculate) : '- ');
 rates.val(!isNaN(calculate) ? nf.format(((calculate * d) - a)) : '- ');
 total.val(!isNaN(calculate) ? nf.format((calculate * d)) : '- ');
 root.on({
 submit: (e) => {
 e.preventDefault();
 result.html(null);
 result.append(__.sprintf(caption, nf.format(a), `${d}`));
 result.append(header);
 let rest = parseInt(a);
 let monthRate = ((r/12)/100).toFixed(5);
 for(let i = 0; i < d; i++) {
 let newRest = rest - (calculate - (monthRate*rest));
 if(i%12 === 0) {
 result.append(`<tr id="year-${(i/12)+1}">
 <td colspan="4">
 ${(i/12)+1}<sup>${i === 0 ? 'ère': 'ème'}</sup> année
 ${i > 0 ? ' : '+ nf.format(a-rest)+ ' remboursés':''}
 </td>
 </tr>`);
 }
 result.append(__.sprintf(
 line,
 (i+1),
 nf.format(monthRate*rest),
 nf.format(calculate - (monthRate*rest)),
 (newRest > 0
 ? nf.format(newRest)
 : 0
 ))
 );
 rest = newRest;
 }
 }
 });
 };
 __(document).ready(calc);
 root.find('input, select').on('input', calc);
 })(jQuery)