PDA

View Full Version : Help with 2 issues

99shark
03-24-2012, 04:29 PM
Hi,

I have written the program below and I am encountering 2 issues. 1. The principal paid is listing with more that 2 decimal places and 2. I need the program to stop after 360th payment.

Thanks

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package assign2_ppoland;

/**
*
* @author ppoland
// * Virtual Organization: McBride Financial Services
// * Request Name: SR-mf-003- Mortgage Payment Calculator
// * Change Request: 1
// Requestor: Dwain Hammer - Billings, MT
// Description: Write the program in Java (without a graphical user
// * interface) using a loan amount of \$200,000 with an
// * interest rate of 5.75% and a 30 year term. Display the
// * mortgage payment amount and then list the loan balance
// * and interest paid for each payment over the term of the
// * loan. If the list would scroll off the screen, use loops
// * to display a partial list, hesitate, and then display
// * more of the list.
// */
public class Assign2_PPoland {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
calculateMonthlyPayment();
}

public static void calculateMonthlyPayment()
{
//First you must define some variables to make it easier to set up:
//P = principal, the initial amount of the loan
double dblP = 200000.00;
//I = the annual interest rate (from 1 to 100 percent)
double dblI = 5.75;
//L = length, the length (in years) of the loan, or at least the length over which the loan is amortized.
int intL = 30;
//The following assumes a typical conventional loan where the interest is compounded monthly. First I will define two more variables to make the calculations easier:
//J = monthly interest in decimal form = I / (12 x 100)
double dblJ = dblI / (12 * 100);
//N = number of months over which loan is amortized = L x 12
int intN = intL * 12;
//Okay now for the big monthly payment (M) formula, it is:
// M = P * (J/ (1 - (1 + J)^ -N)
// J
// M = P x ------------------------
//
// 1 - ( 1 + J ) ^ -N
//
//where 1 is the number one (it does not appear too clearly on some browsers)
double dblM = dblP * (dblJ / (1 - Math.pow((1 + dblJ), - intN)));
System.out.println("Monthly Payment = \$" +dblM+ "\n");
// So to calculate it, you would first calculate 1 + J then take that to the -N (minus N) power, subtract that from the number 1. Now take the inverse of that (if you have a 1/X button on your calculator push that). Then multiply the result times J and then times P. Sorry, for the long way of explaining it, but I just wanted to be clear for everybody.
// The one-liner for a program would be (adjust for your favorite language):
// M = P * ( J / (1 - (1 + J) ** -N))

calculateAmortizationTable(dblP,dblJ,dblM);
}
public static void calculateAmortizationTable(double dblP,double dblJ, double dblM)
{
//So now you should be able to calculate the monthly payment, M.
//To calculate the amortization table you need to do some iteration (i.e. a simple loop).
//I will tell you the simple steps :
int intCounter =0;
while(dblP>0 ){
intCounter++;
//Step 1: Calculate H = P x J, this is your current monthly interest
double dblH = dblP*dblJ;
//Step 2: Calculate C = M - H, this is your monthly payment minus your monthly interest, so it is the amount of principal you pay for that month
double dblC = dblM-dblH;
//Step 3: Calculate Q = P - C, this is the new balance of your principal of your loan.
double dblQ = dblP-dblC;
//Step 4: Set P equal to Q and go back to Step 1: You thusly loop around until the value Q (and hence P)
//goes to zero.
dblP=dblQ;
System.out.print("Payment # " + intCounter);
System.out.printf(" Loan Balance = \$%.2f",dblP);
System.out.printf(" Interest Paid = \$%.2f",dblH);
System.out.printf(" Principal Paid = " + dblC + "\n");

}
}
}