public class RATE {

    /**
* calculateRate:类excel中的RATE函数,计算结果值为月利率,年华利率 需*12期. <br/>
* rate = calculateRate(periods, payment, present_val, future_val, type,
* estimate) ;
*
* @author guooo 2018年7月11日 上午11:13:55
* @param nper
* 为总投资期,即该项投资的付款期总数。
* @param pmt
* 为各期付款额,其数值在整个投资期内保持不变。通常 pmt 包括本金和利息,但不包括其他费用或税金。如果忽略了
* pmt,则必须包含 fv 参数。
* @param pv
* 为现值,即从该项投资开始计算时已经入帐的款项,或一系列未来付款当前值的累积和,也称为本金。
* @param fv
* 为未来值,或在最后一次付款后希望得到的现金余额,如果省略 fv,则假设其值为零,也就是一笔贷款的未来值为零。
* @param type
* 数字 0 或 1,用以指定各期的付款时间是在期初还是期末。 0或省略-期末|| 1-期初
* @param guess
* 预期利率。 如果省略预期利率,则假设该值为 10%。
* @return
* @since JDK 1.6
*/
public static double calculateRate(double nper, double pmt, double pv, double fv, double type, double guess) {
//FROM MS http://office.microsoft.com/en-us/excel-help/rate-HP005209232.aspx
int FINANCIAL_MAX_ITERATIONS = 20;//Bet accuracy with 128
double FINANCIAL_PRECISION = 0.0000001;//1.0e-8 double y, y0, y1, x0, x1 = 0, f = 0, i = 0;
double rate = guess;
if (Math.abs(rate) < FINANCIAL_PRECISION) {
y = pv * (1 + nper * rate) + pmt * (1 + rate * type) * nper + fv;
} else {
f = Math.exp(nper * Math.log(1 + rate));
y = pv * f + pmt * (1 / rate + type) * (f - 1) + fv;
}
y0 = pv + pmt * nper + fv;
y1 = pv * f + pmt * (1 / rate + type) * (f - 1) + fv; // find root by Newton secant method
i = x0 = 0.0;
x1 = rate;
while ((Math.abs(y0 - y1) > FINANCIAL_PRECISION) && (i < FINANCIAL_MAX_ITERATIONS)) {
rate = (y1 * x0 - y0 * x1) / (y1 - y0);
x0 = x1;
x1 = rate; if (Math.abs(rate) < FINANCIAL_PRECISION) {
y = pv * (1 + nper * rate) + pmt * (1 + rate * type) * nper + fv;
} else {
f = Math.exp(nper * Math.log(1 + rate));
y = pv * f + pmt * (1 / rate + type) * (f - 1) + fv;
} y0 = y1;
y1 = y;
++i;
}
return rate;
} /**
* simpleCalculateRate:(这里用一句话描述这个方法的作用). <br/>
*
* @author guooo 2018年7月12日 上午11:19:24
* @param nper
* 为总投资期,即该项投资的付款期总数。
* @param pmt
* 为各期付款额,其数值在整个投资期内保持不变。通常 pmt 包括本金和利息,但不包括其他费用或税金。如果忽略了
* pmt,则必须包含 fv 参数。
* @param pv
* 为现值,即从该项投资开始计算时已经入帐的款项,或一系列未来付款当前值的累积和,也称为本金。
* @return
* @since JDK 1.6
*/
public static double simpleCalculateRate(double nper, double pmt, double pv) { double fv = 0; //0或省略-期末支付
double type = 0; //如果省略预期利率,则假设该值为 10%。
double guess = 0.1; return calculateRate(nper, pmt, pv, fv, type, guess);
} public static void main(String[] args) {
System.out.println(simpleCalculateRate(12, 874.52, -10000) * 12);
System.out.println(simpleCalculateRate(24, 454.67, -10000) * 12);
System.out.println(simpleCalculateRate(36, 315.67, -10000) * 12);
}
}

扩展阅读:

Excel中RATE函数的Java实现的更多相关文章

  1. Excel中PMT函数的Java实现

    public class PMT { /** * * 计算月供 * * @param rate * 年利率 年利率除以12就是月利率 * @param nper * 贷款期数,单位月 该项贷款的付款总 ...

  2. Excel中COUNTIFS函数统计词频个数出现次数

    Excel中COUNTIFS函数统计词频个数出现次数   在Excel中经常需要实现如下需求:在某一列单元格中有不同的词语,有些词语相同,有的不同(如图1所示).需要统计Excel表格中每个词语出现的 ...

  3. [VBA]用一个简单例子说明如何在Excel中自定义函数

    Excel中的函数无疑是强大的,但是再强大的战士也有他脆弱的脚后跟[1].这两天在使用Excel的时候遇到了一个需求,要在某一个单元格里面自动计算今天是星期几(如显示 Today is Tuesday ...

  4. Excel中choose函数的使用方法

    你还在为Excel中choose函数的使用方法而苦恼吗,今天小编教你Excel中choose函数的使用方法,让你告别Excel中choose函数的使用方法的烦恼. 经验主要从四方面对Excel函数进行 ...

  5. Excel中Sumproduct函数的使用方法

    1.sumproduct函数的含义 1 1.Sumproduct函数的适用范围,在给定的几组数组中,然后把数组间对应的元素相乘,最后返回乘积之和. 从字面上可以看出,sumproduct有两个英文单词 ...

  6. Excel中concatenate函数的使用方法

    你还在为Excel中concatenate函数的使用方法而苦恼吗,今天小编教你Excel中concatenate函数的使用方法,让你告别Excel中concatenate函数的使用方法的烦恼. 经验主 ...

  7. Excel中IF函数的嵌套用法(多条件)

    Excel中IF函数的嵌套用法(多条件)   Excel中IF函数的嵌套用法(多条件)   函数格式:if(logical_test,value_if_true,value_if_false).其中: ...

  8. Excel中countif函数的使用方法

    1.countif函数的含义 在指定区域中按指定条件对单元格进行计数(单条件计数) 建议和countifs函数结合起来学习,可以观看小编的经验Excel中countifs函数的使用方法. END 2. ...

  9. Excel中MATCH函数的正确使用

    Excel中MATCH函数是一个很强大的辅助函数, MATCH函数语法为:MATCH(lookup_value,lookuparray,match-type) lookup_value:表示查询的指定 ...

随机推荐

  1. 【转】 C#后台调用前台javascript的五种方法

    第一种,OnClientClick    (vs2003不支持这个方法)<asp:ButtonID="Button1" runat="server" Te ...

  2. linux 用蓝牙和手机通信

    加载模块: # modprobe hci_usb    # modprobe rfcomm    # hciconfig hci0 up # hciconfig hci0 up 查看状况: # hci ...

  3. PySide——Python图形化界面入门教程(二)

    PySide——Python图形化界面入门教程(二) ——交互Widget和布局容器 ——Interactive Widgets and Layout Containers 翻译自:http://py ...

  4. select ,update 加锁

    最近我在弄一个项目,其中涉及到了数据批量导入数据库的过程,在导入数据的时候,每一条数据会生成一个唯一标识,但是我发现有些数据的标识重复了.我在网上查了一下说这是“数据库 并发性”的问题解决方案,上锁. ...

  5. 微信小程序把玩(十五)checkbox组件

    原文:微信小程序把玩(十五)checkbox组件 不得不吐糟下checkbox默认样式真是有点略丑!!!checkbox组件为一个多选框被放到checkbox-group组中,并在checkbox-g ...

  6. 在DELPHI中*.wav 文件怎么加到资源文件中

    比较“流行”的说法是:“16位的Delphi   1.0和32位的Delphi2.0.3.0都提供了资源         编译工具,其中   Delphi   1.0的资源编译器叫BRCC.EXE,D ...

  7. SQLite Expert Professional 打开加密SQLite数据库

    原文 SQLite Expert Professional 打开加密数据库 (已修改) 版本:sqlite expert professional 4.2.0.739 (x86) 目的:用SQLite ...

  8. 使用scratchbox2建立交叉编译环境

    使用scratchbox2建立交叉编译环境,使交叉编译不再烦人..... os:ubuntu 12.04.4 x64 1. 安装相关工具sudo apt-get install debootstrap ...

  9. C#实现bitmap图像矫正

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  10. Spring MVC的工作原理,我们来看看其源码实现

    前言 开心一刻 晚上陪老丈人吃饭,突然手机响了,我手贱按了免提……哥们:快出来喝酒!哥几个都在呢!我:今天不行,我现在陪老丈人吃饭呢.哥们:那你抓紧喝,我三杯白酒,把我岳父放倒了才出来的,你也快点.看 ...