Simulation de remboursement d'emprunt avec EasyCompte |
|
Voir le résultat       Télécharger le script |
|
Ce script présente, sous forme de tableau, le montant de remboursement mensuel d'un
emprunt, en fonction de la durée de remboursement et du taux d'intérêt. |
|
Principe |
|
Chaque case du tableau a pour valeur, le montant du remboursement mensuel de l'emprunt, en
fonction du taux d'intérêt exprimé en tête de colonne, de la durée du remboursement, exprimée
en nombre d'années, en tête de ligne, et du montant (saisi) de l'emprunt à rembourser. |
|
La formule théorique, permettant de calculer la mensualité (MntRbtPer), en fonction du
taux d'intérêt (Taux), du nombre de périodes (NbPer) et du montant emprunté (MntEmprunt) est la suivante : |
|
| MntRbtPer = MntEmprunt x | Taux | |
|
|
| 1 - (1 + Taux)  - NbPer |
|
|
|
Quel montant aurai-je à rembourser, chaque mois pendant 4 ans, si j'emprunte la somme de 10 000 euros, au taux annuel de 6 % ?  
Dans cet exemple : |
- MntEmprunt est le montant emprunté, soit 10 000 euros,
- Taux est le taux d'intérêt sur une période et est donc égal à 0,06 / 12, soit 0,005 pour un mois,
- NbPer est le nombre d'échéances, soit 48 mois sur 4 ans.
|
|
Le résultat est donc : |
| MntRbtPer = 10 000 x | 0,005 | = 234.85 |
|
|
| 1 - 1,005 - 48 |
|
|
|
Programmation |
|
La fonction pow() |
|
La fonction pow(a,b), qui permet de calculer a à la puissance b, n'accepte plus, depuis
les versions ultérieures à la version 4.0.6 de PHP, que des nombres a et b entiers. Dans notre exemple,
a est égal à 1,005 et la fonction pow() retourne dans ce cas, une anomalie. |
Pour y remédier, la fonction pow(a,b) est remplacée par l'expression équivalente exp(log(a) x b). |
|
La fonction number_format() |
|
La fonction number_format(a,b,c,d) formate le nombre a, en vue de son affichage. |
- a, de type float, représente le nombre à formater,
- b, de type int, représente le nombre de décimales à afficher,
- c, de type string, représente le caractère utilisé comme séparateur décimal,
- d, de type string, représente le caractère utilisé comme séparateur des milliers.
La fonction retourne le résultat, sous forme de chaîne de caractères (string).
Pour le nombre $nombre=1234567.8, l'instruction <? echo number_format($nombre,2,'.',' '); ?> affiche 1 234 567.80
|
|
Script |
|
<?
$TauxMin=4;$TauxMax=15;
$nbAnneesMin=2;$nbAnneesMax=20;
?> |
|
<HTML>
<HEAD>
<title>Simulation de remboursement d'emprunt avec EasyCompte</title>
<META name="description" content="Ce script présente, sous forme de tableau, le montant de remboursement mensuel d'un
emprunt, en fonction de la durée de remboursement et du taux d'intérêt.">
|
|
<style>
|
BODY {background-color:#FFFFD2; color:#000000;font-family:Arial, Helvetica, sans-serif;font-size:12}
A:link {color:#993300}
A:visited {color:#cc6633}
A:hover,A:active {background:#008080;color:#FFFFFF}
.tdleft,.tdright,.tdcenter,.thcenter,.thleft,.thright {padding-left: 5pt;padding-right:5pt;padding-top:0;padding-bottom:0;vertical-align:middle}
.tdleft,thleft {text-align:left;font-size:12}
.tdright,.thright {text-align:right;font-size:12}
.tdcenter,.thcenter {text-align:center;font-size:12}
.thcenter,.thleft,.thright {color:white;background-color:#008080;font-weight:bold} |
</style> |
|
<script language="javascript">
/* ---------------------------------------------------------------------------------------- */
/* Contrôle des valeurs des champs du formulaire */
/* ---------------------------------------------------------------------------------------- */
function control_saisie(form) { |
if (saisie.MntEmprunt.value=="") { |
alert("Le montant de l'emprunt est une information à saisir obligatoirement");
form.MntEmprunt.focus();
return false; |
} |
if (isNaN(saisie.MntEmprunt.value)) { |
alert("Le montant de l'emprunt doit être une information numérique")
form.MntEmprunt.focus();
return false; |
} |
} |
</script>
</HEAD> |
|
<BODY onLoad="window.defaultStatus=top.document.title"> |
|
<form name="saisie" method="post" action="<? echo $PHP_SELF; ?>" onSubmit="return control_saisie(this)">
<table width=778 align="center"> |
<tr><td><font color="#004080" size="4"><b>Simulation d'emprunt</b></font></td></tr>
<tr><td> </td></tr>
<tr><td> |
<table bgcolor="aqua"> |
<tr><td class=tdleft>Calculez votre remboursement mensuel</td></tr>
<tr><td class=tdleft>pour un emprunt de |
<INPUT TYPE="TEXT" name="MntEmprunt" SIZE="11" maxlength="11" value="<? echo $MntEmprunt; ?>" |
onMouseOver="javascript:window.status='Montant emprunté'">   |
<INPUT type="submit" value="Go" |
onMouseOver="window.status='Calcul du montant des remboursements périodiques'"></td></tr> |
</table> |
</td></tr> |
</table>
</form><!-- Fin du formulaire -------------------------------------------------------------------> |
|
<table border=0 cellspacing=1 cellpadding=0 width="778" align="center"> |
|
<tr><td> </td><? |
for ($col=$TauxMin;$col<=$TauxMax;$col++) { ?> |
<th class=thcenter><? echo $col; ?> %</th><? |
} ?> |
</tr> |
|
<? $bgcolor=""; |
for ($row=$nbAnneesMin;$row<=$nbAnneesMax;$row++) { |
$bgcolor == "#99CCFF" ? $bgcolor="#CCFFFF" : $bgcolor="#99CCFF"; ?> |
<tr bgcolor="<? echo $bgcolor; ?>"> |
<th class=thright width="1%" nowrap><? echo $row; ?> ans</th><?
for ($col=$TauxMin;$col<=$TauxMax;$col++) { |
$x=1+$col/1200;
$MntRbtPer=number_format($MntEmprunt/(1-1/exp(log($x)*$row*12))*($x-1),'2','.',' '); ?>
<td class=tdright nowrap><? echo $MntRbtPer; ?></td><? |
} |
echo "</tr>"; |
} ?> |
</table> |
</BODY> |
</HTML> |
|
Optimisation |
|
Pour les plus courageux, il est possible d'optimiser les performances de ce script :
- La formule de calcul $MntRbtPer=number_format($MntEmprunt/(1-1/exp(log($x)*$row*12))*($x-1),'2','.',' ');
recalcule systématiquement, le nombre de mensualités. Or celui-ci est identique pour toutes les
cellules de la même ligne. Il est donc envisageable de n'effectuer ce calcul qu'une fois en début
de ligne et utiliser le résultat, dans la formule, pour toutes les cellules de la ligne.
- De la même manière, le taux d'intérêt mensuel, calculé dans l'expression $x=1+$col/1200
est identique pour toutes les cellules de la même colonne. Il est par conséquent envisageable de ne
calculer qu'une seule fois les différents taux d'intérêt mensuels et les enregistrer dans un tableau.
|