【问题标题】:P/Y C/Y - Calculate future value (FV) from payments (PMT) with compounding period per year (C/Y)P/Y C/Y - 从付款 (PMT) 计算未来价值 (FV) 和每年的复利期 (C/Y)
【发布时间】:2019-04-03 06:32:55
【问题描述】:

我正在做一个 TVM 项目,但不太了解复利如何转化为代码。我正在使用 BA II Plus 财务计算器作为参考。

示例:如果利息按季度计算 5%,则计算 10 年内每月月初支付的 100 美元付款的未来价值。

在财务计算器中:

N: 120 (10y x 12m)

I/Y:5%(年利率)

P/Y:12(每年 12 次)

C/Y:4(每年 4 次)

现值:0

PMT:100

BGN:是的

FV:[CPT] [FV] => -15575.41334


这是未来价值法。

static public double fv(double r, int n, double pmt, double pv, int bgn) {
    return -(pv * Math.pow(1 + r, n) + pmt * (1 + r * bgn) * (Math.pow(1 + r, n) - 1) / r);
}

使用示例中的数字调用方法

//             rate     n    pmt  pv bgn
double fv = fv(0.05/12, 120, 100, 0, 1); // -15592.928894335751 which is wrong

【问题讨论】:

  • 你确定结果不对?
  • 是的,结果完全错误,因为我的参数中还没有复利。

标签: java calculator financial tvm


【解决方案1】:

您似乎在计算中遇到了数值错误。

浮点计算本质上会受到舍入误差的影响,这些误差加起来会变得非常大。

例如一般背景(长读):

https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

您可以尝试使用高精度计算库。

例如此答案中提到了一些不错的选择:

https://stackoverflow.com/a/284588/9549171

编辑:您可以尝试使用https://herbie.uwplse.org/ 分析您正在使用的表达式(但网络版本在您的表达式上超时,您必须下载他们的软件)

【讨论】:

  • 感谢您的回答,我的参数中还没有复利 (C/Y = 4)。我还不知道把它放在哪里。这就是我现在卡住的地方。
  • 我根本没想过您要计算的什么。我只是看到你采用了一个重要的公式并直接用 java 代码写出来,这立刻让我怀疑。舍入错误可能既棘手又危险。例如,使用标准二次公式这样做是出了名的危险(可以在homes.cs.washington.edu/~jrw12/herbie.pdf 中找到解释)[编辑:特别是 java 没有错]
猜你喜欢
  • 2023-03-31
  • 2021-05-13
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多