package com.company;import java.math.BigDecimal;class Financials {/*** pmt** @param rate 年利率 年利率除以12就是月利率* @param nper 贷款期数,单位月 该项贷款的付款总数。* @param pv   贷款金额,现值,或一系列未来付款的当前值的累积和,也称为本金。* @return*/public static double pmt(double rate, double nper, double pv) {double v = (1 + (rate / 12));double t = (-(nper / 12) * 12);double result = (pv * (rate / 12)) / (1 - Math.pow(v, t));return result;}/*** irr* @param income 指定现金流值。此数组必须至少含有一个负值(支付)和一个正值(收入)* @return 指定一系列周期性现金流(支出或收入)的内部利率。*/public static double irr(double[] income) {return irr(income, 0.1D);}/*** irr** @param income 指定现金流值。此数组必须至少含有一个负值(支付)和一个正值(收入)* @param guess  指定 IRR 返回的估算值。如果省略,guess 为 0.1* @return 指定一系列周期性现金流(支出或收入)的内部利率。*/public static double irr(double[] income, double guess) {int maxIterationCount = 20;double absoluteAccuracy = 1.0E-007D;double x0 = guess;int i = 0;while (i < maxIterationCount) {double fValue = 0.0D;double fDerivative = 0.0D;for (int k = 0; k < income.length; k++) {fValue += income[k] / Math.pow(1.0D + x0, k);fDerivative += -k * income[k] / Math.pow(1.0D + x0, k + 1);}double x1 = x0 - fValue / fDerivative;if (Math.abs(x1 - x0) <= absoluteAccuracy) {return x1;}x0 = x1;i++;}return (0.0D / 0.0D);}/*** npv** @param income 指定现金流值。此数组必须至少含有一个负值(支付)和一个正值(收入)* @param i      折现率(基准收益率)* @return 净现值*/public static double npv(double[] income, double i) {double npv = 0d;for (int n = 1; n < income.length + 1; n++) {/* (CI-CO) / ((i+i)^n) */npv += income[n - 1] / Math.pow(1 + i, n);}return npv;}public static double rate(double nper, double pmt, double pv) {double error = 0.0000001;double high = 1.00;double low = 0.00;double rate = (2.0 * (nper * pmt - pv)) / (pv * nper);while (true) {// check for error margindouble calc = Math.pow(1 + rate, nper);calc = (rate * calc) / (calc - 1.0);calc -= pmt / pv;if (calc > error) {// guess too high, lower the guesshigh = rate;rate = (high + low) / 2;} else if (calc < -error) {// guess too low, higher the guesslow = rate;rate = (high + low) / 2;} else {// acceptable guessbreak;}}//System.out.println("Rate : "+rate);return rate;}//参考 https://support.office.com/zh-CN/article/PV-%E5%87%BD%E6%95%B0-23879D31-0E02-4321-BE01-DA16E8168CBD/** 如果您获得年利率为 10% 的汽车贷款,并且每月还款一次,则每月的利率为 10%/12(即 0.83%)。* 您需要在公式中输入 10%/12(即 0.83%)或 0.0083 作为利率。* */public static double pv(double monthRate, int periods, double peridsAmount) {/** 如果年化收益率为零,monthRate作分母会出现NaN错误,需要对月利率为零进行特殊处理*/if (monthRate == 0) {return periods * peridsAmount;}double var = Math.pow(1 + monthRate, -periods);double pvAmount = (peridsAmount - peridsAmount * var) / monthRate;return new BigDecimal(pvAmount).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();}public static void main(String[] args) {/**  验证百度百科上面的例子*  https://baike.baidu.com/item/%E5%87%80%E7%8E%B0%E5%80%BC/500068* */double[] income0 = {-800, -600, 500, 600, 900};double npv = npv(income0, 0.08);System.out.println(String.format("%.2f", npv));/**  例子来源于*  https://wiki.mbalib.com/wiki/IRR%E5%87%BD%E6%95%B0* */double[] income1 = {-1500000, 400000, 500000, 600000, 700000, 860000};double irr = irr(income1, 0.1);System.out.println(String.format("%.2f", irr));/** pmt计算公式* 例子来源于* https://wiki.mbalib.com/wiki/PMT%E5%87%BD%E6%95%B0* */double pmt = pmt(0.08, 12 * 15, 200000);System.out.println(String.format("%.2f", pmt));double rate1 = rate(68, 118161.59, 4146470.27);System.out.println(rate1);System.out.println("finished");System.out.println(pv(0.08 / 12, 5, 662.12));}
}

Financials相关推荐

  1. 豪赌 ARM 梦碎:63 岁孙正义的「花甲历险记」

    来源 | HyperAI超神经 这几天,传出 NVIDIA 将以 400 亿 英镑的价格收购 ARM 的消息,不少媒体在争相报道收购进度的同时,也将整起交易的幕后推手 -- 孙正义,放到了聚光灯下. ...

  2. 全球第五大社交网站,二号员工离职创业,自爆心酸历程!想做10亿美元规模?先活着!...

    大表姐导读:创业者不易,创业故事更加珍贵.美国Pinterest,全球第五大社交网站,图片版Twitter,工号第2号员工从0到1出来创业.自爆心酸历程.从昔日的明星创业公司沦落到公司只剩他一人.资产 ...

  3. SAP S/4 HANA新变化-信用管理

    SAP S/4 HANA新变化-信用管理 http://mp.weixin.qq.com/s?__biz=MzAwMjgyMTA4MQ==&mid=2652153153&idx=1&a ...

  4. 如何搜索国外上市企业的财务数据以及年报

    方法一 1.先上雪球:https://xueqiu.com/ 输入中文名称"好未来",得到股票代码:TAL:(点我直达) 2.然后在必应搜索上输入:TAL site:www.mor ...

  5. Hive神兽大厅源码搭建安装及使用

    一.安装方式(内嵌模式,本地模式远程模式) 安装环境以及前提说明:     Hive是依赖于hadoop系统的,因此在运行Hive之前需要保证已经搭建好hadoop集群环境. 本例中使用的hadoop ...

  6. hive常用sql语句

    2019独角兽企业重金招聘Python工程师标准>>> 数据库 创建数据库 hive> CREATE DATABASE financials;hive> CREATE D ...

  7. 解析列表中的数据python_将html数据解析成python列表进行操作

    我会采取完全不同的方法.我们使用LXML来抓取html页面 我们切换的原因之一是因为BS有一段时间没有被维护,或者我应该说是更新了.在 在我的测试中,我运行了以下内容import requests f ...

  8. 扎克伯格“气哭”了:Meta搞元宇宙巨亏,股价暴跌市值蒸发2000多亿美元

    鱼羊 丰色 发自 凹非寺 量子位 | 公众号 QbitAI 大概谁也料想不到,Facebook母公司更名Meta后首份财报发布,应声而来的竟是美国公司有史以来最大单日市值损失-- 股价下跌26%,市值 ...

  9. SAP 企业管理软件与解决方案 产品简介

    目录 一.SAP名词解释 SAP Business Suite mySAP ERP mySAP CRM SAP Netweaver mySAP.com SAP R/3 SAP All-in One ( ...

最新文章

  1. 【linux】在CentOS7上更改端口号时报错:Job for sshd.service failed because the control process exited with error
  2. socket接收的消息怎么更新到页面_spring boot 集成 websocket 实现消息主动
  3. HttpReports 2.0 发布了 !!!
  4. jetty嵌入式容器_嵌入式Jetty和Apache CXF:借助Spring Security来保护REST服务
  5. 模板模式(部分方法延迟到子类实现)
  6. 精通android学习笔记(一)---广播
  7. C语言中动态内存分配的本质是什么?
  8. 异步编程模型(C#5.0系列)
  9. (实用软件分享)屏幕取色器ColorPix
  10. for each,for in,for of三者区别
  11. 黑苹果OC配置工具 OpenCore Configurator 2.25中文版
  12. 5mm方格本打印模板_自制方格本模板
  13. win7动态壁纸_壁纸软件推荐-wallpaper engine
  14. 【wxGlade学习】wxGlade环境配置
  15. Kaldi声学模型训练
  16. sql server 2000企业管理器中没有项目
  17. 容联云发送手机短信验证码
  18. android viewpager标题,ViewPager顶部导航栏联动效果(标题栏条目多)
  19. 怎么查计算机网络硬件配置,怎么样查看电脑配置?5种方法查看电脑硬件配置好坏图文详解...
  20. 如何掌握程序语言(转自王垠Blog)

热门文章

  1. 通过图片地址,将图片处理成base64,使用ajax上传图片
  2. 得一微ys9082hc主控开卡 软件+教程
  3. 【情人节快乐】“我还是很喜欢你就像sin²a+cos²a 始终如一”(附表白代码)
  4. 微信小程序使用wxparse,显示图片的相对路径问题
  5. 千锋人工智能python培训班
  6. 迷你linux主机,2019迷你电脑主机推荐
  7. 精品:AG 1.3.8 for mac 百度网盘不限速下载软件
  8. 【中级软考】软件成本估算方法(专家估算、Wolverton、COCOMO、COCOMOⅡ【应用组合模型、早期开发模型、结构化后期模型】)
  9. 期货多空代码(期货多空趋势指标源码)
  10. Python 提取信号的包络