java中rate,Java务实际利率之Excel函数RATE

Java求实际利率之Excel函数RATE

在excel里有个函数RATE是求实际利率的,在网上搜罗了半年,公式倒是找到不少,可以没有一个实现的算法,郁闷,自己研究,写一个出来,做个备忘

公式:

0300574417.gif

上面的太复杂,来个简单的:

0300574418.jpg

使用JAVA求实际利率

/**

* 实际利率法

* @author Bean(mailto:mailxbs@126.com)

* @param a 现值

* @param b 年金

* @param c 期数

* @param cnt 运算次数

* @param ina 误差位数

* @return 利率

*/

public static double rate(double a,double b,double c,int cnt,int ina){

double rate = 1,x,jd = 0.1,side = 0.1,i = 1;

do{

x = a/b - (Math.pow(1+rate, c)-1)/(Math.pow(rate+1, c)*rate);

if(x*side>0){side = -side;jd *=10;}

rate += side/jd;

}while(i++=1/Math.pow(10, ina));

if(i>cnt)return Double.NaN;

return rate;

}

public static void main(String agrs[]) {

{

Double 现值 = 7944760.00d;

Double 年金 = 186627.21d;

Double 期数 = 48d;

//计算200次,比Excel20次要精确,误差精确到小数点后10位

System.out.println(rate(现值,年金,期数,200,10));

}

}

计算输出0.00501013209570014,与Excel的0.00501013309186311很接近了,偷乐一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个示例 UDF 函数,它模拟 Excel RATE 函数,用于计算投资的利率。 ``` Function RATE(nper As Double, pmt As Double, pv As Double, fv As Double, Optional guess As Double = 0.1, Optional tol As Double = 0.0001) As Double Dim i As Integer Dim rate As Double Dim y As Double Dim f As Double Dim x1 As Double Dim x2 As Double Dim y1 As Double Dim y2 As Double x1 = guess x2 = guess * 1.1 For i = 1 To 100 y1 = pv * (1 + x1) ^ nper + pmt * ((1 + x1) ^ nper - 1) / x1 + fv y2 = pv * (1 + x2) ^ nper + pmt * ((1 + x2) ^ nper - 1) / x2 + fv rate = x2 - y2 * ((x2 - x1) / (y2 - y1)) y = pv * (1 + rate) ^ nper + pmt * ((1 + rate) ^ nper - 1) / rate + fv If Abs(y) < tol Then RATE = rate Exit Function Else If y > 0 Then x1 = rate Else x2 = rate End If End If Next i End Function ``` 这个函数接受五个参数:nper、pmt、pv、fv 和可选参数 guess 和 tol。这些参数分别代表投资期数、每期支付金额、现值、未来值以及一个猜测的利率和容忍度。 在函数,我们使用迭代的方式来逐步逼近正确的利率。我们选择两个不同的猜测值,计算它们的函数值,然后使用牛顿-拉夫逊方法来迭代计算。当函数值足够接近于零时,我们认为找到了正确的利率,并将其返回。 请注意,UDF 函数需要在 VBA 编辑器创建,并保存在 Excel 工作簿文件的模块。使用该函数的方法与内置函数类似,例如,在单元格输入 `=RATE(10, 100, -1000, 0, 0.1, 0.0001)` 即可计算利率

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值