public static double PV(double rate, double nPer, double pmt, double fv = 0.0, DueDatePeriod period = DueDatePeriod.EndOfPeriod) { double pv; if (rate == 0.0) { pv = -fv - pmt * nPer; } else { double factor = period == DueDatePeriod.EndOfPeriod ? 1.0 : 1.0 + rate; double pow = Math.Pow(1.0 + rate, nPer); pv = -(fv + pmt * factor * ((pow - 1.0) / rate)) / pow; } return(pv); }
private static double FV(double rate, double nPer, double pmt, double pv = 0.0, DueDatePeriod period = DueDatePeriod.EndOfPeriod) { double fv; if (rate == 0.0) { fv = -pv - pmt * nPer; } else { double factor = period == DueDatePeriod.EndOfPeriod ? 1.0 : 1.0 + rate; double pow = Math.Pow(1.0 + rate, nPer); fv = -pv * pow - pmt / rate * factor * (pow - 1.0); } return(fv); }