#!/usr/local/bin/perl print <Prepayment Calculator
Header $args = $ENV{'QUERY_STRING'}; $args =~ s/\+/ /g; $args =~ s/%([\da-f]{1,2})/pack(C,hex($1))/eig; if (length($args) < 2) { print <Effects of Prepayment Calculator

This calculator takes a principal amount, interest rate, normal length of the loan and either how much total a month to pay or how long you want to pay.


Enter your loan amount:
Your interest rate:
Amortized Length of mortgage:
Output Type

EmptyForm } else { print "

Effects of Prepayment Calculator

"; print "
"; @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); } } $myErr=" "; if($amt <= 0 ){$myErr = $myErr . "
  • The loan amount must be greater than zero!

  • ";} if($int <= 0 ){$myErr = $myErr . "
  • The interest rate must be greater than zero!

  • ";} if($len <= 0 ){$myErr = $myErr . "
  • Expected Years must be greater than zero!

  • ";} if($ovl <= 0 ){$myErr = $myErr . "
  • $opt must be greater than zero!

  • ";} if ($myErr ne " ") {print "

    I am sorry but the following problems must be fixed before I can provide good data:

      $myErr

    ";exit;} if ($opt =~ /Length/) { $opt = "LENGTH"; } else { $opt = "AMOUNT"; } $thou = $amt/1000; #$int = $ir1 + $ir2; $tt = $len * 12; $i = $int / 1200; if ($tt > 0) { if ($i > 0) { $paymt = $amt * $i / (1 - ((1 + $i) ** -$tt)); } else { $paymt = $amt / $tt; } printf( "\n",$paymt); } else { $paymt = 0; } if ($opt eq "AMOUNT") { if ($ovl < $paymt) { printf( "\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("\n", $m,$p,$ci,$amt,$ti); } } $y = $m/12; if ($tt > 0) { printf("\n", $ovl - $paymt, $eti - $ti); } } } else { if ($ovl > $len && $tt > 0) { print ""; } 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"; $amtt = $amt; while($amtt > 0 && $j < 1200) { $ci = $amtt * $i; $p = $dpt - $ci; $amtt = $amtt * (1 + $i) - $dpt; $j++; $ti = $ti + $ci; printf("\n", $j, $p, $ci, $amtt, $ti); } } if($ovl eq $len) { print ""; } else { printf("\n",$dpt - $paymt,$dpt ); } } } } print "
    Payment on original \$ $amt loan at $int for $len years would be \$ %9.2f\n


    \$ %9.2f won't cut it!

    You need at least \$ %9.2f to meet your minimum monthly payment!!!

    Better start mowing some lawns...

    \n",$ovl,$paymt); } else { if ($ovl < $amt * $i && $tt == 0) { printf("

    that's less than the interest of \$ %9.2f

    ",$amt * $i); exit; } $eti = $paymt * $tt - $amt; if ($out =~ /Full/) { print "
    MonthPrincipalInterestBalanceTot Int
    %3d%9.2f%9.2f%9.2f%9.2f
    By paying an extra %7.2f each month you paid it off early and saved \$ %10.2f

    Sorry, it can't take longer than the amortization

    That's considered defaulting on your loan!
    You could lose your house!

    MonthPrincipalInterestBalanceTot Int
    %2d%9.2f%9.2f%9.2f%9.2f

    Of course to pay off a $len year loan in $ovl years,
    you should make your standard monthly payment!

    To pay off the same loan in $ovl years,
    you would need to increase your monthly
    payment by \$ %7.2f to \$ %7.2f
    \n"; print<