Excel中RATE函数的Java实现
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实现的更多相关文章
- Excel中PMT函数的Java实现
public class PMT { /** * * 计算月供 * * @param rate * 年利率 年利率除以12就是月利率 * @param nper * 贷款期数,单位月 该项贷款的付款总 ...
- Excel中COUNTIFS函数统计词频个数出现次数
Excel中COUNTIFS函数统计词频个数出现次数 在Excel中经常需要实现如下需求:在某一列单元格中有不同的词语,有些词语相同,有的不同(如图1所示).需要统计Excel表格中每个词语出现的 ...
- [VBA]用一个简单例子说明如何在Excel中自定义函数
Excel中的函数无疑是强大的,但是再强大的战士也有他脆弱的脚后跟[1].这两天在使用Excel的时候遇到了一个需求,要在某一个单元格里面自动计算今天是星期几(如显示 Today is Tuesday ...
- Excel中choose函数的使用方法
你还在为Excel中choose函数的使用方法而苦恼吗,今天小编教你Excel中choose函数的使用方法,让你告别Excel中choose函数的使用方法的烦恼. 经验主要从四方面对Excel函数进行 ...
- Excel中Sumproduct函数的使用方法
1.sumproduct函数的含义 1 1.Sumproduct函数的适用范围,在给定的几组数组中,然后把数组间对应的元素相乘,最后返回乘积之和. 从字面上可以看出,sumproduct有两个英文单词 ...
- Excel中concatenate函数的使用方法
你还在为Excel中concatenate函数的使用方法而苦恼吗,今天小编教你Excel中concatenate函数的使用方法,让你告别Excel中concatenate函数的使用方法的烦恼. 经验主 ...
- Excel中IF函数的嵌套用法(多条件)
Excel中IF函数的嵌套用法(多条件) Excel中IF函数的嵌套用法(多条件) 函数格式:if(logical_test,value_if_true,value_if_false).其中: ...
- Excel中countif函数的使用方法
1.countif函数的含义 在指定区域中按指定条件对单元格进行计数(单条件计数) 建议和countifs函数结合起来学习,可以观看小编的经验Excel中countifs函数的使用方法. END 2. ...
- Excel中MATCH函数的正确使用
Excel中MATCH函数是一个很强大的辅助函数, MATCH函数语法为:MATCH(lookup_value,lookuparray,match-type) lookup_value:表示查询的指定 ...
随机推荐
- 关于QSocket的释放的一个需要注意的情况(必须先断开连接)
最近在用QtNetwork编写服务器程序进行TCP/IP通信,大体过程如下: 1. 创建一个QTcpServer实例,监听目标IP和端口: 2. 一旦监听到有连接,获取和客户端之间的socket: 3 ...
- Win10《芒果TV》更新v3.8.50勇敢版:新增短信和扫码登录
勇敢,是心中最初的信仰,实景科幻实验节目<勇敢的世界>,重装上阵对抗升级,<中餐厅2>皇阿玛圣驾亲临,坐镇中国味道.Win10版<芒果TV>全平台同步更新勇敢版v3 ...
- Ubuntu服务器搭建
Ubuntu16 搭建Git 服务器 - 濮成林 - 博客园 https://www.cnblogs.com/charliePU/p/7528226.html Ubuntu 搭建 GitLab 笔记 ...
- Reverse Engineering Custom DataTypes -> GUID() in SQL Server to PostgreSQL
原文 https://archive.sap.com/discussions/thread/3641585 First you reverse engineer from a script where ...
- 零元学Expression Blend 4 - Chapter 38 看如何使用Clip修出想要的完美曲线(下)
原文:零元学Expression Blend 4 - Chapter 38 看如何使用Clip修出想要的完美曲线(下) 你可以把Clip想成是一个遮罩,运用遮罩达到我们想要的效果 所以在这里我们把文字 ...
- Android零基础入门第5节:善用ADT Bundle,轻松邂逅女神
原文:Android零基础入门第5节:善用ADT Bundle,轻松邂逅女神 在前几期中总结分享了Android的前世今生.Android 系统架构和应用组件那些事.带你一起来聊一聊Android开发 ...
- WCSTOMBS 函数不支持中文件的解决方法(设置代码页)
代码页没有进行设置.需要调用locale.h 中定义的一个函数设置默认的代码页 _tsetlocale(LC_ALL,_T(""));//设置代码页 wcstombs(sendB ...
- visual studio添加docker支持简记
很久以前学过一段时间的docker,那时装了电脑卡得受不了,学了一会就卸载了,最近电脑又装上了docker,感觉好像没有以前这么卡了,还是同一台电脑surface pro4, 试了一下visual s ...
- MJPhotoBrowser 用法
一.使用方法: #import "MJPhotoBrowser.h" #import "MJPhoto.h" - (void)tapPhoto:(UIT ...
- 海康威视频监控设备Web查看系统(二):服务器篇
声明:本系列文章只提供交流与学习使用.文章中所有涉及到海康威视设备的SDK均可在海康威视官方网站下载得到.文章中所有除官方SDK意外的代码均可随意使用,任何涉及到海康威视公司利益的非正常使用由使用者自 ...