示例#1
0
        /// <summary>
        /// This Method preforms an Amortization Calculation (giving the user the balance, interest paid, and principle paid
        /// between time p1 and p2. Note that p1 & p2 and be period 1 (start of loan) and period 10 (potential end of loan) or
        /// P1 & P2 could both be for period five which would provide the balance at P5, as well as principle and interest paid for that period.
        /// </summary>
        /// <param name="tObj"></param>
        /// <param name="aObj"></param>
        /// <returns></returns>
        public static AmortObject AmortCompute(TvmObject tObj, AmortObject aObj)
        {
            var r = tObj.I / 100;

            aObj.C_Bal = tObj.Pv;

            for (int i = 1; i <= aObj.P2; i++)
            {
                aObj.I_Paid = aObj.C_Bal * r;
                aObj.P_Paid = tObj.Pmt + aObj.I_Paid;
                aObj.C_Bal  = aObj.C_Bal + aObj.P_Paid;

                if (i >= aObj.P1)
                {
                    aObj.IntPaid = aObj.IntPaid + aObj.I_Paid;
                    aObj.PrnPaid = aObj.PrnPaid + aObj.P_Paid;
                }
            }
            aObj.EndBal  = aObj.C_Bal;
            aObj.IntPaid = aObj.IntPaid * -1;
            return(aObj);
        }
示例#2
0
        public void Amort6()     // With + payment and -FV
        {
            //Arrange,
            var tObj = new TvmObject();

            tObj.N   = 10;
            tObj.I   = 10;
            tObj.Pv  = 250;
            tObj.Pmt = 10;
            tObj.Fv  = -907.8099;
            var obj = new AmortObject();

            obj.P1 = 1;
            obj.P2 = 1;

            //Act,
            var result = AmortCompute(tObj, obj);

            //Assert
            Assert.AreEqual(285.0000, Math.Round(result.EndBal, 4));
            Assert.AreEqual(35.0000, Math.Round(result.PrnPaid, 4));
            Assert.AreEqual(-25.0000, Math.Round(result.IntPaid, 4));
        }
示例#3
0
        public void Amort4()     //With Balloon Payment
        {
            //Arrange,
            var tObj = new TvmObject();

            tObj.N   = 10;
            tObj.I   = 10;
            tObj.Pv  = 250;
            tObj.Pmt = -40.0589;
            tObj.Fv  = -10;
            var obj = new AmortObject();

            obj.P1 = 3;
            obj.P2 = 9;

            //Act,
            var result = AmortCompute(tObj, obj);

            //Assert
            Assert.AreEqual(45.5080, Math.Round(result.EndBal, 4));
            Assert.AreEqual(-172.8683, Math.Round(result.PrnPaid, 4));
            Assert.AreEqual(-107.5440, Math.Round(result.IntPaid, 4));
        }
示例#4
0
        public void Amort3()
        {
            //Arrange,
            var tObj = new TvmObject();

            tObj.N   = 10;
            tObj.I   = 10;
            tObj.Pv  = 250;
            tObj.Pmt = -40.6863;
            tObj.Fv  = 0;
            var obj = new AmortObject();

            obj.P1 = 3;
            obj.P2 = 3;

            //Act,
            var result = AmortCompute(tObj, obj);

            //Assert
            Assert.AreEqual(198.0783, Math.Round(result.EndBal, 4));     //calc returned 198.0784 which is strange. Because a double is used it is likely more accurate than the BA II Plus.
            Assert.AreEqual(-18.9804, Math.Round(result.PrnPaid, 4));
            Assert.AreEqual(-21.7059, Math.Round(result.IntPaid, 4));
        }
示例#5
0
        public void Amort2()
        {
            //Arrange,
            var tObj = new TvmObject();

            tObj.N   = 10;
            tObj.I   = 10;
            tObj.Pv  = 250;
            tObj.Pmt = -40.6863;
            tObj.Fv  = 0;
            var obj = new AmortObject();

            obj.P1 = 3;
            obj.P2 = 5;

            //Act,
            var result = AmortCompute(tObj, obj);

            //Assert
            Assert.AreEqual(154.2336, Math.Round(result.EndBal, 4));
            Assert.AreEqual(-62.8252, Math.Round(result.PrnPaid, 4));
            Assert.AreEqual(-59.2337, Math.Round(result.IntPaid, 4));
        }
示例#6
0
        public void Amort()
        {
            //Arrange,
            var tObj = new TvmObject();

            tObj.N   = 10;
            tObj.I   = 10;
            tObj.Pv  = 250;
            tObj.Pmt = -40.6863;
            tObj.Fv  = 0;
            var obj = new AmortObject();

            obj.P1 = 1;
            obj.P2 = 1;

            //Act,
            var result = AmortCompute(tObj, obj);

            //Assert
            Assert.AreEqual(234.3137, Math.Round(result.EndBal, 4));
            Assert.AreEqual(-15.6863, Math.Round(result.PrnPaid, 4));
            Assert.AreEqual(-25.0000, Math.Round(result.IntPaid, 4));
        }
示例#7
0
        public void Amort8()     // With + payment -PV -FV
        {
            //Arrange,
            var tObj = new TvmObject();

            tObj.N   = 10;
            tObj.I   = 10;
            tObj.Pv  = -250;
            tObj.Pmt = 103.4317;
            tObj.Fv  = -1000;
            var obj = new AmortObject();

            obj.P1 = 1;
            obj.P2 = 1;

            //Act,
            var result = AmortCompute(tObj, obj);

            //Assert
            Assert.AreEqual(-171.5683, Math.Round(result.EndBal, 4));
            Assert.AreEqual(78.4317, Math.Round(result.PrnPaid, 4));
            Assert.AreEqual(25.0000, Math.Round(result.IntPaid, 4));
        }
示例#8
0
        public void Amort7()     // With - payment -PV +FV
        {
            //Arrange,
            var tObj = new TvmObject();

            tObj.N   = 10;
            tObj.I   = 10;
            tObj.Pv  = -250;
            tObj.Pmt = -25;
            tObj.Fv  = 1046.8712;
            var obj = new AmortObject();

            obj.P1 = 1;
            obj.P2 = 1;

            //Act,
            var result = AmortCompute(tObj, obj);

            //Assert
            Assert.AreEqual(-300.0000, Math.Round(result.EndBal, 4));
            Assert.AreEqual(-50.0000, Math.Round(result.PrnPaid, 4));
            Assert.AreEqual(25.0000, Math.Round(result.IntPaid, 4));
        }
示例#9
0
 public OnAmortComputeEventArgs(AmortObject amortObj) : base()
 {
     AmortObj = amortObj;
 }
示例#10
0
        /// <summary>
        /// Use has clicked the Amort Compute Click
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void mBtnAMORTCompute_Click(object sender, EventArgs e)
        {
            TvmObject   O     = new TvmObject();
            AmortObject A     = new AmortObject();
            bool        Valid = true;

            #region Verify Format
            if ((double.TryParse(mN.Text, out double t)) == false)
            {
                mN.Text = "";
                mN.Hint = "Invalid Input";
                Valid   = false;
            }
            if ((double.TryParse(mIY.Text, out double u)) == false)
            {
                mIY.Text = "";
                mIY.Hint = "Invalid Input";
                Valid    = false;
            }
            if ((double.TryParse(mPV.Text, out double v)) == false)
            {
                mPV.Text = "";
                mPV.Hint = "Invalid Input";
                Valid    = false;
            }
            if ((double.TryParse(mPMT.Text, out double w)) == false)
            {
                mPMT.Text = "";
                mPMT.Hint = "Invalid Input";
                Valid     = false;
            }
            if ((double.TryParse(mFV.Text, out double x)) == false)
            {
                mFV.Text = "";
                mFV.Hint = "Invalid Input";
                Valid    = false;
            }
            if ((Int32.TryParse(mP1.Text, out int y)) == false)
            {
                mP1.Text = "";
                mP1.Hint = "Invalid Input";
                Valid    = false;
            }
            if ((Int32.TryParse(mP1.Text, out int y1)) == true)
            {
                if (!(Int32.Parse(mP1.Text) >= 1))
                {
                    mP1.Text = "";
                    mP1.Hint = "P1 Must Be At Least Equal To 1";
                    Valid    = false;
                }
            }
            if (((Int32.TryParse(mP1.Text, out int y2)) == true) && (Int32.TryParse(mP2.Text, out int y3)) == true)
            {
                if (!(Int32.Parse(mP1.Text) <= Int32.Parse(mP2.Text)))
                {
                    mP1.Text = "";
                    mP1.Hint = "P1 Must Be Less Than Or Equal To P2";
                    Valid    = false;
                }
            }
            if ((Int32.TryParse(mP2.Text, out int z)) == false)
            {
                mP2.Text = "";
                mP2.Hint = "Invalid Input";
                Valid    = false;
            }
            if ((((double.TryParse(mP1.Text, out double yz1)) == true) && (double.TryParse(mP2.Text, out double yz2)) == true) && (double.TryParse(mN.Text, out double yz3) == true))
            {
                if (!(double.Parse(mP1.Text) <= double.Parse(mN.Text)))
                {
                    mP1.Text = "";
                    mP1.Hint = "P1 Must Be Less Than Or Equal To N";
                    Valid    = false;
                }
                if (!(double.Parse(mP2.Text) <= double.Parse(mN.Text)))
                {
                    mP2.Text = "";
                    mP2.Hint = "P2 Must Be Less Than Or Equal To N";
                    Valid    = false;
                }
            }
            #endregion

            if (Valid == true)
            {
                O.N   = double.Parse(mN.Text);
                O.I   = double.Parse(mIY.Text);
                O.Pv  = double.Parse(mPV.Text);
                O.Pmt = double.Parse(mPMT.Text);
                O.Fv  = double.Parse(mFV.Text);
                A.P1  = Convert.ToInt32(mP1.Text);
                A.P2  = Convert.ToInt32(mP2.Text);

                A = AmortCompute(O, A);

                mOnAmortComptComplete.Invoke(this, new OnAmortComputeEventArgs(A));
                this.Dismiss();
            }
        }
示例#11
0
 /// <summary>
 /// Constructor that requires a AmrotObj Param
 /// </summary>
 /// <param name="parameterIn"></param>
 public Dialog_AMORTOUTPUT(AmortObject parameterIn)
 {
     O = parameterIn;
 }