Header
$args = $ENV{'QUERY_STRING'};
$args =~ s/\+/ /g;
$args =~ s/%([\da-f]{1,2})/pack(C,hex($1))/eig;
if (length($args) < 4)
{} else
{
@f = split("&",$args);
for ($i=0; $i<=$#f; $i++)
{
$av = @f[$i]; $av =~ s/[ ,+]//g;
if ($av =~ /^amt/) { $amt = substr($av,4); }
if ($av =~ /^int/) { $int = substr($av,4); }
if ($av =~ /^len/) { $len = substr($av,4); }
if ($av =~ /^opt/) { $opt = substr($av,4); }
if ($av =~ /^ovl/) { $ovl = substr($av,4); }
if ($av =~ /^out/) { $out = substr($av,4); }
}
if ($opt =~ /Length/) { $opt = "LENGTH"; } else { $opt = "AMOUNT"; }
$thou = $amt/1000;
#$int = $ir1 + $ir2;
print "For a loan of \$ $amt at a interest rate of $int %\n";
print "for $len years\n";
$tt = $len * 12; $i = $int / 1200;
if ($tt > 0)
{
if ($i > 0) { $paymt = $amt * $i / (1 - ((1 + $i) ** -$tt)); }
else { $paymt = $amt / $tt; }
printf("Your original principal & interest payment is : \$ %9.2f\n",
$paymt);
}
else
{
$paymt = 0;
}
if ($opt eq "AMOUNT")
{
if ($ovl < $paymt)
{
print "Sorry, you did not pay enough!\n";
printf("You entered \$ %9.2f, You need \$ %9.2f more\n",
$ovl, $paymt - $ovl);
}
else
{
printf("You stated that you could afford to pay \$ %9.2f per month.\n", $ovl);
if ($paymt > 0)
{ printf("That's an extra \$ %9.2f each month\n",
$ovl - $paymt); }
if ($ovl < $amt * $i && $tt == 0)
{
printf("But that's less than the interest of \$ %9.2f",
$amt * $i); exit;
}
$eti = $paymt * $tt - $amt;
if ($out =~ /Full/)
{ print "\n| Month | Principal | Interest | Balance | Tot Int\n"; }
while($amt > 0 && $m < 1200)
{
$ti = $ti + $amt * $i; $ci = $amt * $i; $p = $ovl - $ci;
$amt = $amt * (1 + $i) - $ovl; $m++;
if ($out =~ /Full/)
{ printf(" | | %3d | %9.2f | %9.2f | %9.2f | %9.2f\n",
$m,$p,$ci,$amt,$ti); }
}
if ($out =~ /Full/) { print " | \n"; }
$y = $m/12;
printf("Your loan will be paid off in %3d months (%6.3f years)\n",
$m, $y);
if ($tt > 0)
{ printf("Expected total interest : \$ %10.2f\n",$eti); }
printf("Your total interest : \$ %10.2f\n",$ti);
if ($tt > 0)
{ printf("Total interest saved : \$ %10.2f\n",$eti - $ti); }
}
}
else
{
if ($ovl > $len && $tt > 0)
{
print "Sorry, it can't take longer than the amortization";
print "That's called defaulting on your loan!";
}
else
{
$dm = $ovl * 12; $dpt_l = $paymt; $dpt_h = 10 * $paymt; $m = 0;
if ($dpt_h == 0) { $dpt_h = $amt; }
while($dpt_h > $dpt_l + .01)
{
$dpt = ($dpt_l + $dpt_h) / 2;
$m = 0; $amtt = $amt;
while($amtt > 0 && $m < 1200)
{
$amtt = $amtt * (1 + $i) - $dpt; $m++;
}
if ($m < $dm) { $dpt_h = $dpt; } else { $dpt_l = $dpt; }
}
if ($out =~ /Full/)
{
print "\n";
print "| Month | Principal | Interest | Balance | Tot Int\n";
$amtt = $amt;
while($amtt > 0 && $j < 1200)
{
$ci = $amtt * $i; $p = $dpt - $ci;
$amtt = $amtt * (1 + $i) - $dpt; $j++; $ti = $ti + $ci;
printf(" | | %2d | %9.2f | %9.2f | %9.2f | %9.2f\n",
$j, $p, $ci, $amtt, $ti);
}
print " | \n";
}
print "You've stated that you would like to pay off your loan in $ovl years.\n";
printf(" Your new required monthly payment is: \$ %7.2f\n",$dpt);
printf(" That's an extra \$ %7.2f a month\n",$dpt - $paymt);
$paid_interest = sprintf("%9.2f",$ovl * 12 * $dpt - $amt);
$totl_interest = sprintf("%9.2f",$len * 12 * $paymt - $amt);
printf(" By choosing to prepay your loan, you have saved yourself: \$ %9.2f in interest payments!\n",
$totl_interest - $paid_interest);
}
}
}
}
sub missing {
read(STDIN,$in,$ENV{'CONTENT_LENGTH'});
@v = split("&",$in); $tbl = "N";
for ($i=0; $i<=$#v; $i++)
{
($key,$val) = split("=",@v[$i]);
$val =~ s/%([\da-f]{1,2})/pack(C,hex($1))/eig;
$val =~ s/,//g;
$val =~ s/ //g;
$aa{$key} = $val;
if ($val < 1) { $zeroes++; $which = $key; }
}
if ($zeroes > 1)
{
# Too many zeroes! I'll use defaults
$aa{LA} = 100000; $aa{AI}=8.00; $aa{NM} = 360; $aa{MP} = 0; $which = "MP";
}
if ($which eq "MP")
{
$mi = $aa{AI}/1200;
$aa{MP} = sprintf("%8.2f",$aa{LA} * $mi / (1 - (1 + $mi)** - $aa{NM}));
$aa{MP} =~ s/ //g;
}
if ($which eq "LA")
{
$mi = $aa{AI}/1200;
$aa{LA} = sprintf("%8.2f",$aa{MP} /( $mi / (1 - (1 + $mi)** - $aa{NM})));
$aa{LA} =~ s/ //g;
}
if ($which eq "NM")
{
$mi = $aa{AI}/1200;
$nm_lo = 0 ; $nm_hi = 2000;
while($nm_lo < $nm_hi + 0.01 && $mc < 500)
{
$nm = ($nm_lo + $nm_hi) / 2;
$cmp = sprintf("%8.2f",$aa{LA} * $mi / (1 - (1 + $mi)** - $nm));
if ($cmp > $aa{MP}) { $nm_lo = $nm; } else { $nm_hi = $nm; }
$mc++;
}
$aa{NM} = sprintf("%3d",$nm);
$aa{NM} =~ s/ //g;
if ($aa{NM} > 1999)
{
$needed_min = sprintf("%8.2f",$aa{LA} * $mi);
$msg = "You will never pay off your loan, the required minimum is \$ $needed_min just to cover interest";
$aa{NM} = 0;
}
}
if ($which eq "AI")
{
if ($aa{MP} * $aa{NM} < $aa{LA})
{
$msg = "That payment is too low to ever pay off that loan";
}
else
{
$ai_lo = 0 ; $ai_hi = 500;
while($ai_lo < $ai_hi + 0.0001 && $mc < 500)
{
$ai = ($ai_lo + $ai_hi) / 2;
$mi = $ai/1200;
$cmp = sprintf("%8.2f",$aa{LA} * $mi / (1 - (1 + $mi)** - $aa{NM}));
if ($cmp < $aa{MP}) { $ai_lo = $ai; } else { $ai_hi = $ai; }
$mc++;
}
$aa{AI} = sprintf("%9.5f",$ai);
$aa{AI} =~ s/ //g;
if ($aa{AI} == 500)
{
$msg = "If you paid that much that long, you're paying annual interest over 500%";
$aa{AI} = 0;
}
}
}
$yrs = sprintf("%6.3f",$aa{NM}/12);
print<How Much Will My Payments Be?
|