Ruby on rails 在Rails中重新创建NPER

Ruby on rails 在Rails中重新创建NPER,ruby-on-rails,ruby,math,Ruby On Rails,Ruby,Math,特别是对于下面的公式,我尝试在我的一个模型中重新创建一个名为nper的方法。计算结果并不像预期的那样(使用Excel中的NPER函数进行测试),我认为这是因为我如何编写我的方法 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)

特别是对于下面的公式,我尝试在我的一个模型中重新创建一个名为
nper
的方法。计算结果并不像预期的那样(使用Excel中的NPER函数进行测试),我认为这是因为我如何编写我的方法

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.31125000)

收益率:
~360
(30年期固定贷款)

利率先除以100,然后再除以12,因为
rate
是每个期间的利率

使用
Math.log10()
,下面的公式非常有用。我稍微修改了一下,这样我就可以使用pmt的负版本,并使用type和fv(未来值)


参考资料:

有一个名为Exonio的gem:它实现了一些Excel财务方法,包括
nper

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

不,不应该。这在数学上是不可能的。没有导致结果为负数的输入。我在Excel中对其进行了测试,结果如下。让我们试试另一个图(更新)。
Exonio.nper(0.07 / 12, -150, 8000) # ==> 64.07334877066185