[转]Java求实际利率之Excel函数RATE

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

 

 

公式:

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

使用JAVA求实际利率

Java代码   收藏代码
  1. /**  
  2.  * 实际利率法  
  3.  * @author Bean(mailto:mailxbs@126.com)  
  4.  * @param a 现值  
  5.  * @param b 年金  
  6.  * @param c 期数  
  7.  * @param cnt 运算次数  
  8.  * @param ina 误差位数  
  9.  * @return 利率  
  10.  */   
  11. public   static   double  rate( double  a, double  b, double  c, int  cnt, int  ina){  
  12.     double  rate =  1 ,x,jd =  0.1 ,side =  0.1 ,i =  1 ;  
  13.     do {  
  14.         x = a/b - (Math.pow(1 +rate, c)- 1 )/(Math.pow(rate+ 1 , c)*rate);  
  15.         if (x*side> 0 ){side = -side;jd *= 10 ;}  
  16.         rate += side/jd;  
  17.     }while (i++<cnt&&Math.abs(x)>= 1 /Math.pow( 10 , ina));  
  18.     if (i>cnt) return  Double.NaN;  
  19.     return  rate;  
  20. }  
  21. public   static   void  main(String agrs[]) {  
  22.     {  
  23.     Double 现值 = 7944760 .00d;  
  24.     Double 年金 = 186627 .21d;  
  25.     Double 期数 = 48d;  
  26.        
  27.     //计算200次,比Excel20次要精确,误差精确到小数点后10位   
  28.     System.out.println(rate(现值,年金,期数,200 , 10 ));  
  29.     }  
  30. }  
    /**
     * 实际利率法
     * @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++<cnt&&Math.abs(x)>=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
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值