复制固定价值年金方程的代码,没有给出正确的答案

  • 本文关键字:答案 代码 复制 方程 c# finance
  • 更新时间 :
  • 英文 :


我正在构建一个金融计算器,我正在开发的一部分是找到固定年金的未来价值。定期年金(即期末付款(的等式为:

PMT/i * ((1+i)^n - 1) * (1+iT)

其中PMT是每期t的支付,i = r/m是增长率r除以每期复利mnm*t的复利期数,T01价值变量,表示它是普通年金还是到期年金。

我针对特定函数的方法是:

public static decimal FutureFixedAnnuityValue(decimal annuity, float time, float interest, int nCompPeriods = 1, int startImmediately = 0)
{
return annuity / (decimal)interest * (decimal)(Math.Pow(1 + interest / nCompPeriods, time * nCompPeriods) - 1) * (decimal)(1 + interest / nCompPeriods * startImmediately);
}

在这边,PMT = annuity, t = time, r = interest, m = nCompPeriods, T = startImmediately.

为了收集参数,我使用以下按钮单击方法:

private void btnCalculate_Click(object sender, EventArgs e)
{
decimal payment = decimal.Parse(txtAnnuity.Text); //PMT
int periods = int.Parse(txtPeriods.Text); //t
float gain = float.Parse(txtEnterInterest.Text) / 100; //r
float length = float.Parse(txtEnterYears.Text); //m
int immediately = chkPaymentAt.Checked ? 1 : 0; //due or ordinary
decimal afv = FinanceCalculations.FutureFixedAnnuityValue(payment, length, gain, periods, immediately);
lblAnnuityFixed.Text = afv.ToString("C2");
}

为了测试我的方法是否有效,我使用这个在线计算器:https://www.calculatorsoup.com/calculators/financial/future-value-annuity-calculator.php。

使用PMT = 1000, t = 10, r = 1, m = 12, T = 0参数,我的应用程序给出了$10 512.49,但计算器给出了$10 464.39。但是,如果我更改m = 1我的应用程序和计算器都会给出$10 462.21.

我不知道是什么导致了这种差异。我尝试将annuity / (decimal)interest更改为annuity / (decimal)(interest/nCompPeriods)但这在直觉上没有意义,因为降低分母会进一步增加输出,并且测试它证实了我的怀疑,因为我的输出变得$126 149.88

这到底是怎么回事呢?我不知道是什么导致了差异。这似乎与annuity / (decimal)interest分母有关,但我只是不知道它能是什么。

我已经解决了我的问题。这与付款频率与复利期数量不一致的事实有关。发生这种情况时r必须重新计算,以使用此处找到的等式找到有效比率。然后,支付频率(称为q(取代m,并且用q而不是m重新计算in

完成此操作后,错误将得到修复。我在我的函数中添加了一个paymentFrequency整数参数,用于检查nCompPeriods是否与paymentFrequency相同。如果它们匹配,则原始计算就足够了,否则必须将interest转换为另一个有效利率,paymentFrequency代替nCompPeriods

相关内容

最新更新