我的應用程序必須計算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