我的应用程序必须计算XIRR,但我不能使用excel,因为它运行在Linux上,任何人都可以共享逻辑或java代码来计算XIRR而不使用excel。java程序来计算XIRR而不使用excel或任何其他库
1
A
回答
2
如在后说明:xirr-calculation in c#
根据XIRR函数OpenOffice的文档(式是相同的Excel),则需要在以下的F(XIRR)方程求解XIRR变量: xirr equation
我只是用Java语言编写了C#代码,并且没有任何的sup库,它工作的很好。即使是日期差异。但在生产代码中,您将使用像apache common这样的东西。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class XirrDate {
public static final double tol = 0.001;
public static double dateDiff(Date d1, Date d2){
long day = 24*60*60*1000;
return (d1.getTime() - d2.getTime())/day;
}
public static double f_xirr(double p, Date dt, Date dt0, double x) {
return p * Math.pow((1.0 + x), (dateDiff(dt0,dt)/365.0));
}
public static double df_xirr(double p, Date dt, Date dt0, double x) {
return (1.0/365.0) * dateDiff(dt0,dt) * p * Math.pow((x + 1.0), ((dateDiff(dt0,dt)/365.0) - 1.0));
}
public static double total_f_xirr(double[] payments, Date[] days, double x) {
double resf = 0.0;
for (int i = 0; i < payments.length; i++) {
resf = resf + f_xirr(payments[i], days[i], days[0], x);
}
return resf;
}
public static double total_df_xirr(double[] payments, Date[] days, double x) {
double resf = 0.0;
for (int i = 0; i < payments.length; i++) {
resf = resf + df_xirr(payments[i], days[i], days[0], x);
}
return resf;
}
public static double Newtons_method(double guess, double[] payments, Date[] days) {
double x0 = guess;
double x1 = 0.0;
double err = 1e+100;
while (err > tol) {
x1 = x0 - total_f_xirr(payments, days, x0)/total_df_xirr(payments, days, x0);
err = Math.abs(x1 - x0);
x0 = x1;
}
return x0;
}
private static SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
public static Date strToDate(String str){
try {
return sdf.parse(str);
} catch (ParseException ex) {
return null;
}
}
public static void main(String... args) {
double[] payments = {-1151250,232912,233123,233336,233551,233768}; // payments
Date[] days = {strToDate("11/11/2015"),strToDate("25/11/2015"),strToDate("25/12/2015"),strToDate("25/01/2016"),strToDate("25/02/2016"),strToDate("25/03/2016")}; // days of payment (as day of year)
double xirr = Newtons_method(0.1, payments, days);
System.out.println("XIRR value is " + xirr);
}}
+0
这有365个硬编码。这是否意味着它不会支持闰年? – dukethrash
相关问题
- 1. Excel中的XIRR计算
- 2. 用Python计算XIRR
- 3. XIRR计算
- 4. 重复使用计算的md5(或任何其他校验和)
- 5. 使用excel和java或其他打印
- 6. MySQL使用计算的返回值来计算其他值
- 7. 如何订购字典而不使用_collections或其他库?
- 8. 将excel附加到使用docx4j(或任何其他api)的.docx
- 9. 如何干扰其他Windows程序(使用C#,C++或Java)
- 10. Java应用程序与Microsoft Access或其他数据库?
- 11. 静态库或其他任何东西
- 12. vb.net应用程序不能在其他计算机上工作?
- 13. 如何使用R或任何其他编程语言来估计两个不同分布的混合参数?
- 14. 如何计算阵列中的独特元素,而无需使用任何其他数据结构JAVA
- 15. 不能其他计算机
- 16. WPF应用程序的字体在记事本或任何其他应用程序中看起来不同
- 17. 使用Java一倍(或其他任何东西)来存储简单的分数
- 18. 如何从其他计算机访问APEX应用程序?
- 19. 关于DC/OS马拉松(或任何其他Java应用程序)的Apache Ignite
- 20. 使用格雷码(或其他?)来存储任何可变的位宽值,而不会存储其宽度
- 21. Excel:如何基于计算来求和值而不是范围?
- 22. POI堆空间异常或用于Excel 2007的任何其他java api?
- 23. ShellExecute不适用于其他计算机
- 24. 如何读取excel文件并使用java和poi或任何其他库管理程序将这些数据插入到数据库中?
- 25. 第一天程序员其他语句为计算器程序
- 26. 这是可能的java或任何其他编程语言
- 27. 程序在其他windows计算机上不能正常工作
- 28. 其他计算机
- 29. 如何在云计算或超级计算机中执行Java应用程序
- 30. 使用MapReduce或其他分布式计算方法进行分析计算?
我发现了互联网的逻辑。 – sskini