c# - 复制固定价值年金等式的代码,但未给出正确答案
问题描述
我正在构建一个金融计算器,我正在开发的一个部分是找到固定年金的未来价值。定期年金(即期末支付)的公式为:
PMT/i * ((1+i)^n - 1) * (1+iT)
其中PMT
是 每期付款t
,i = r/m
是增长率r
除以每期复利次数m
,n
是复利期数m*t
,T
是一个0
或1
价值变量,表明它是普通年金还是到期年金。
我对特定功能的方法是:
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
i
n
q
m
完成后,错误就修复了。我在函数中添加了一个paymentFrequency
整数参数,用于检查是否nCompPeriods
与paymentFrequency
. 如果匹配,则原来的计算就足够了,否则interest
必须转化为另一个有效率并paymentFrequency
代替nCompPeriods
。
推荐阅读
- java - 如何在 RHPAM 中创建角色特定的流程实例表单
- selenium-webdriver - 将多个外部数据集与黄瓜/硒测试环境相结合
- ebay-api - eBay Browse API 将 category_id 的数量限制为 1,但文档说您可以添加多个 category_id
- sql - Oracle SQL 执行计划差异
- python - youtube_dl.utils.DownloadError:错误:找不到 ffprobe/avprobe 和 ffmpeg/avconv。请安装一个。安装错误
- flutter - Flutter 单元测试 - 期望 SuccessState 之间的差异
和成功状态 - javascript - 开玩笑从文件中调用默认模拟
- bash - bash 脚本中有没有一种方法可以选择提供参数,但它不应该是必须的?
- javascript - 如何在 TensorflowJS 中使用 Keras.backend?
- r - 如何在R中按密度着色的散点图添加椭圆?