StillLearning
StillLearning

Reputation: 111

Amortisation schedule, monthly principal decreasing instead of increasing

Hi I am trying to create a amortization schedule , which shows the EMI , Principal , Interest and the new Principal for next month. The problem is that the monthly principal instead of increasing keeps on decreasing. As far as from searching the net , I am doing the right calculations. What am I missing?

          decimal principal = 312500;
                decimal rate = 3.50M;
                decimal EMI;
                decimal monthlyInterest;
                decimal monthlyPrincipal;
                decimal newPrincipalBalance;
                decimal downPayment = 62500;
                decimal actualPrincipal = principal - downPayment;

                for (int i = 0; i <= 24; i++)
                {

                    Console.WriteLine("principal " + actualPrincipal);
                    EMI = Math.Round(monthlyPayments(actualPrincipal, rate, 30));
                    Console.WriteLine("EMI " + EMI);

                    monthlyInterest = actualPrincipal * rate / 12;
                    monthlyInterest = Math.Round((actualPrincipal * rate / 100) / 12);
                    Console.WriteLine("monthlyInterest " + monthlyInterest);

                    monthlyPrincipal = Math.Round(EMI - monthlyInterest);
                    Console.WriteLine("monthlyPrincipal " + monthlyPrincipal);

                    newPrincipalBalance = Math.Round(actualPrincipal - monthlyPrincipal);
                    Console.WriteLine("newPrincipalBalance " + newPrincipalBalance);
                    Console.WriteLine("===================================");
                    actualPrincipal = newPrincipalBalance;
                }

        


        }


        public static decimal monthlyPayments(decimal actualPrincipal, decimal rate, int years)
            
        {
            rate = rate / 1200;
            years = years * 12;
           
            decimal F = (decimal)Math.Pow((double)(1 + rate), years);
            return actualPrincipal * (rate * F) / (F - 1);
        }

These are first few of my results where the monthly principal is decreasing enter image description here

This is what the expected result is : enter image description here

This is the formula for calculating the monthlyPayments enter image description here

Upvotes: 0

Views: 99

Answers (1)

StillLearning
StillLearning

Reputation: 111

I found what I was doing wrong. As the EMI remains fixed for the entire period of the loan, it should have been kept outside the loop.

 Console.WriteLine("principal " + actualPrincipal);
            EMI = Math.Round(monthlyPayments(actualPrincipal, rate, 30));
            Console.WriteLine("EMI " + EMI);


            for (int i = 0; i <= 24; i++)
                {
                    monthlyInterest = actualPrincipal * rate / 12;
                    monthlyInterest = Math.Round((actualPrincipal * rate / 100) / 12);
                    Console.WriteLine("monthlyInterest " + monthlyInterest);

                    monthlyPrincipal = Math.Round(EMI - monthlyInterest);
                    Console.WriteLine("monthlyPrincipal " + monthlyPrincipal);

                    newPrincipalBalance = Math.Round(actualPrincipal - monthlyPrincipal);
                    Console.WriteLine("newPrincipalBalance " + newPrincipalBalance);
                    Console.WriteLine("===================================");
                    actualPrincipal = newPrincipalBalance;
                }

Upvotes: 1

Related Questions