在Rails中重新创建NPER

时间:2012-12-23 04:46:36

标签: ruby-on-rails ruby math

具体到下面的公式,我尝试在我的一个模型中将其重新创建为名为nper的方法。计算结果不符合预期(使用Excel中的NPER函数进行测试),我认为这是因为我编写方法的原因。

enter image description here

def nper(rate, pmt, pv, fv = 0, type = 0)
    a = pmt * (1 + rate * type) + (-1 / rate) * fv
    b = pv * rate + pmt * (1 + rate * type)
    c = Math.sqrt(a / b)
    d = Math.sqrt(1 + rate)
    e = (c / d) * 100
end

我首先尝试计算括号,然后使用Math模块中的平方根函数来帮助计算其余部分。我正在计算抵押贷款的期限。我哪里错了?

要测试,请执行以下操作:

nper(((3.5/100)/12), -561.31, 125000)

应该收益:~360(30年固定贷款)

费率除以100然后除以12,因为rate是每期利率

2 个答案:

答案 0 :(得分:2)

使用Math.log10(),以下公式就像魅力一样。我修改了一点,所以我可以使用负版本pmt,并使用type和fv(未来值)。

def nper(rate, pmt, pv, fv = 0, type = 0)
  Math.log10((pmt*(1+rate*type)+(-1/rate)*fv)/(pv*rate+pmt*(1+rate*type))) / Math.log10(1 + rate)
end

参考:MrExcel.com Forum Thread

答案 1 :(得分:0)

有一个名为Exonio的宝石:see this picture,它实现了一些Excel财务方法,包括nper

Exonio.nper(0.07 / 12, -150, 8000) # ==> 64.07334877066185