Solved

PMT options in C#

Posted on 2004-08-20
3
2,173 Views
Last Modified: 2007-12-19
THis is my question i am converting some old vb6 project to C#. One uses the pmt function. I know that if i Microsoft.VisualBasic as a reference i can use this same function. Most people are not happy with me using this.
so here is the function i found

present value = 10000, financial period is 119 months and interest rate is = .129
public  Double calculate_Amount(double presentValue,  double                    
                   financingPeriod,
double interestRatePerYear)
            {
try
{
   double a, b, x,g;
   double monthlyPayment;
   double vbMnthlyPayment;
   a = (1 + interestRatePerYear / 12);
   b = financingPeriod;
   x =   Math.Pow(a, b);
   x = 1 / x;
   x = 1 - x;
//this is the C# way i get a value of  149.33
  monthlyPayment = (presentValue ) * (interestRatePerYear / 12) / x;
// this is the vb way      i get a value of 150.94            
vbMnthlyPayment = Microsoft.VisualBasic.Financial.Pmt(interestRatePerYear/12,financingPeriod,-(presentValue*(1+interestRatePerYear/12)),0,0);
return(monthlyPayment);

The vb reference  is that amount that i need to keep conistent but i dont know how to change the C# function to return the same answer

please help!!
0
Comment
Question by:Steege
  • 3
3 Comments
 
LVL 10

Accepted Solution

by:
eternal_21 earned 250 total points
Comment Utility
Multiply your result by

  (1 + (interestRatePerYear / 12))

And your numbers will match.

The reason for this is that the Microsoft.VisualBasic.Financial.Pmt method can calculate the interest BEFORE the payment or AFTER the payment is made each month.  As you have described it the Due parameter (the last one) is 0.  0 tells the Pmt method to calculate interest before the payment, and a 1 tells the Pmt method to calculate the payment before the interest.

So, your formula is fine if you are making your payment at the start of the month, but if you are paying at the end (and interest has accrued), then you need to multiple your result by (1 + (interestRatePerYear / 12)). (The actual math is a little more complex, but if you expanded the whole amortization formula, you would find that it all works out nice and neat in the end!)
0
 
LVL 10

Expert Comment

by:eternal_21
Comment Utility
And here it is in a nice little method.  Keep in mind that rate is the rate per period (compound), so interestRatePerYear / 12:

  double Payment(double rate, double period, double presentValue)
  {
    return presentValue*rate/(1 - 1/Math.Pow(1 + rate, period))*(1 + rate);
  }

Payment(0.01075d, 119d, 10000d) = 150.942458894686
0
 
LVL 10

Expert Comment

by:eternal_21
Comment Utility
I don't understand why you are using this as the parameter for "present value":

  presentValue*(1+interestRatePerYear/12)
0

Featured Post

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

In order to hide the "ugly" records selectors (triangles) in the rowheaders, here are some suggestions. Microsoft doesn't have a direct method/property to do it. You can only hide the rowheader column. First solution, the easy way The first sol…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
In this tutorial you'll learn about bandwidth monitoring with flows and packet sniffing with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're interested in additional methods for monitoring bandwidt…
This video explains how to create simple products associated to Magento configurable product and offers fast way of their generation with Store Manager for Magento tool.

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now