1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
| <?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "payment";
$link=mysqli_connect($servername,$username,$password,$dbname);
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
if (isset($_POST['button9'])) {
$query = "SELECT * FROM Contrat Limit 1";
if ($result = mysqli_query($link, $query)) {
while ($row = mysqli_fetch_assoc($result)) {
$a= $row["PrixHT"];
$b=$row["Duree"];
$c=$row["VR"];
$d=$row["Redevance"];
ECHO calc_rate($a,$b,$c,$d);
}
/* Libération des résultats */
mysqli_free_result($result);
}
}
/* Fermeture de la connexion */
mysqli_close($link);
function calc_rate($pv, $payno,$RV, $pmt)
{
// check that required values have been supplied
if (empty($pv)) {
echo "<p class='error'>a value for PRINCIPAL is required</p>";
exit;
} // if
if (empty($payno)) {
echo "<p class='error'>a value for NUMBER of PAYMENTS is required</p>";
exit;
} // if
if (empty($pmt)) {
echo "<p class='error'>a value for PAYMENT is required</p>";
exit;
} // if
if (($RV<0)) {
echo "<p class='error'>RV must be > 0 </p>";
exit;
}
// now try and guess the value using the binary chop technique
$GuessHigh = (float)100; // maximum value
$GuessMiddle = (float)2.5; // first guess
$GuessLow = (float)0; // minimum value
$GuessPMT = (float)0; // result of test calculation
do {
// use current value for GuessMiddle as the interest rate,
// and set level of accurracy to 6 decimal places
$GuessPMT = (float)calc_payment($pv, $payno, $GuessMiddle,$RV, 6);
if ($GuessPMT > $pmt) { // guess is too high
$GuessHigh = $GuessMiddle;
$GuessMiddle = $GuessMiddle + $GuessLow;
$GuessMiddle = $GuessMiddle / 2;
} // if
if ($GuessPMT < $pmt) { // guess is too low
$GuessLow = $GuessMiddle;
$GuessMiddle = $GuessMiddle + $GuessHigh;
$GuessMiddle = $GuessMiddle / 2;
} // if
if ($GuessMiddle == $GuessHigh) break;
if ($GuessMiddle == $GuessLow) break;
$int = number_format($GuessMiddle, 9, ".", ""); // round it to 9 decimal places
if ($int == 0) {
echo "<p class='error'>Interest rate has reached zero - calculation error</p>";
exit;
} // if
} while ($GuessPMT !== $pmt);
return $int;
} // calc_rate =======================================================================
function calc_payment($pv, $payno, $int,$RV, $accuracy)
{
// check that required values have been supplied
if (empty($pv)) {
echo "<p class='error'>a value for PRINCIPAL is required</p>";
exit;
} // if
if (empty($payno)) {
echo "<p class='error'>a value for NUMBER of PAYMENTS is required</p>";
exit;
} // if
if (empty($int)) {
echo "<p class='error'>a value for INTEREST RATE is required</p>";
exit;
} // if
if (($RV<0)) {
echo "<p class='error'>RV must be > 0 </p>";
exit;
}
// now do the calculation using this formula:
//******************************************
// INT * ((1 + INT) ** PAYNO)
// PMT = PV * --------------------------
// ((1 + INT) ** PAYNO) - 1
//******************************************
$RV=$RV/pow((1+($int/100)),$payno);
$int = $int / 100; // convert to a percentage
$value1 = $int * pow((1 + $int), $payno);
$value2 = pow((1 + $int), $payno) - 1;
$pmt = ($pv-$RV) * ($value1 / $value2);
// $accuracy specifies the number of decimal places required in the result
$pmt = number_format($pmt, $accuracy, ".", "");
return $pmt;
} // calc_payment ====================================================================
?>
</div>
</body>
</html> |
Partager