POI 不支援函式XIRR
為什麼要寫下來呢,前人栽樹後人乘涼這句話說得很有道理,java呼叫poi讀取excel中的資料,不支援很多excel當中的函式,我最近就遇到了連個 一個是XIRR還有一個是XNPV函式 下一篇補上
我個人也主要是用作記錄使用 並沒有看的太懂 避免下次再用到的時候找不到,也方便剛接觸的人可以更加輕鬆的去查詢和學習,裡面還有很多不足的地方 有大佬看到可以幫忙補充一下
其實這個也是我從網上找的後邊補上連線 來自https://blog.csdn.net/wangqing84411433/article/details/85164999
先是時間工具類,XIRR函式需要用到時間 excel的時間計算和java不同 excel的時間是從1900年1月1日計算 不過因為函式中的計算方式是減 所以1900或者java中的1970都可以
package com.p1.excel.XIRR; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * * @{# DateUtil.java Create on 2013-4-9 * * class desc: * * <p> * Copyright: Copyright(c) 2013 * </p> * <p> * Company: morelap * </p> * @Version 1.0 * @Author <a href="mailto:morelap@morelap.com">Morelap</a> * * */ public class DateUtil { public static final long Minute_MilliSecond = 60 * 1000; public static final long Hour_MilliSecond = Minute_MilliSecond * 60; /** * milliseconds of a day */ public static final long Day_MilliSecond = Hour_MilliSecond * 24; /** * milliseconds of a week */ public static final long Week_MilliSecond = Day_MilliSecond * 7; /** * milliseconds of a month */ public static final long Month_MilliSecond = Week_MilliSecond * 30; /** * yyyyMMdd */ public static final String Date_Default_Formate = "yyyyMMdd"; /** * yyyy-MM-dd HH:mm:ss 2010-05-11 17:22:26 */ public static final String Date_Formate_All = "yyyy-MM-dd HH:mm:ss"; /** * dd/MM/yyyy, hh:mm */ public static final String DATE_FORMATE_TRANSACTION = "dd/MM/yyyy, hh:mm"; /** * MM/dd HH:mm */ public static final String DATE_FORMATE_DAY_HOUR_MINUTE = "MM/dd HH:mm"; /** * HH:mm */ public static final String DATE_FORMATE_HOUR_MINUTE = "HH:mm"; public static final String DATE_FORMATE_HOUR_MINUTE_SECOND = "HH:mm:ss"; public static SimpleDateFormat dateFormate = new SimpleDateFormat(); /** * 獲取當前的字串日期 * * @param splite * 格式的分割線如 - 則獲取的日期時間格式如下: * @return 返回2013-07-19 */ public static String getNowStringDate(String splite) { StringBuffer format = new StringBuffer(); if (splite == null) { format.append(Date_Default_Formate); } else { format.append("yyyy").append(splite).append("MM").append(splite) .append("dd"); } return (new SimpleDateFormat(format.toString())).format(new Date()); } /** * 獲取當前的字串日期時間 * * @param splite * 格式的分割線如 - 則獲取的日期時間格式如下: * @return 返回2013-07-19 09:08:22 */ public static String getNowStringDateTime(String splite) { StringBuffer format = new StringBuffer(); if (splite == null) { format.append(Date_Default_Formate); } else { format.append("yyyy").append(splite).append("MM").append(splite) .append("dd").append(" HH:mm:ss"); } return (new SimpleDateFormat(format.toString())).format(new Date()); } /** * 獲取當前的字串期時間 * * @param splite * 格式的分割線如 - 則獲取的日期時間格式如下: * @return 返回09:08:22 */ public static String getNowStringTime() { StringBuffer format = new StringBuffer(DATE_FORMATE_HOUR_MINUTE_SECOND); return (new SimpleDateFormat(format.toString())).format(new Date()); } /** * 獲取昨天的日期 * * @return Date */ public static Date getYesterdayDate() { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DATE, -1); return calendar.getTime(); } /** * 獲取指定日期的後面的一天 即日期+1 * * @param stringDate * 格式為:2012-02-02 * @return Date */ public static Date getForwardDate(String stringDate) { int year = Integer.parseInt(stringDate.substring(0, 4)); int month = Integer.parseInt(stringDate.substring(5, 7)); int day = Integer.parseInt(stringDate.substring(8, 10)); Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month - 1); c.set(Calendar.DAY_OF_MONTH, day); c.add(Calendar.DATE, 1);// 在此日期的基礎上+1 return c.getTime(); } /** * 獲取指定日期的後面的一天 即日期+1 * * @param stringDate * 格式為:2012-02-02 * @return Date */ public static String getForwardStringDate(String stringDate, String splite) { int year = Integer.parseInt(stringDate.substring(0, 4)); int month = Integer.parseInt(stringDate.substring(5, 7)); int day = Integer.parseInt(stringDate.substring(8, 10)); Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month - 1); c.set(Calendar.DAY_OF_MONTH, day); c.add(Calendar.DATE, 1);// 在此日期的基礎上+1 return getStringDateByDate(c.getTime(), splite); } /** * 根據傳進來的日期date 和格式分割線返回一個字串的日期 * * @param date * 日期 * @param splite * 日期格式的分割線 如:- * @return 2013-07-19 */ public static String getStringDateByDate(Date date, String splite) { StringBuffer format = new StringBuffer(); if (splite == null) { format.append(Date_Default_Formate); } else { format.append("yyyy").append(splite).append("MM").append(splite) .append("dd"); } if (date == null) { date = new Date(); } return (new SimpleDateFormat(format.toString())).format(date); } /** * 根據傳進來的日期stringdate 和格式分割線返回一個字串的日期 * * @param stringDate * 日期 * @param splite * 日期格式的分割線 如:- * @return 2013-07-19 */ public static String getStringDateByStringDate(String stringDate, String splite) { Date date = getDateByStringTime(stringDate); return getStringDateByDate(date, splite); } /** * 根據傳進來的整數獲取一個日期Date * * @param year * 年 * @param month * 月 * @param day * 日 * @return Date */ public static Date getDateByIntegerDate(int year, int month, int day) { Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month - 1); c.set(Calendar.DAY_OF_MONTH, day); return c.getTime(); } /** * 根據傳進來的字串日期格式 獲得一個date * * @param stringTime * 格式如:2013-02-13 中間的-可以為其他字元 * @return date */ public static Date getDateByStringTime(String stringTime) { int year = Integer.parseInt(stringTime.substring(0, 4)); int month = Integer.parseInt(stringTime.substring(5, 7)); int day = Integer.parseInt(stringTime.substring(8, 10)); return getDateByIntegerDate(year, month, day); } /** * 獲得指定日期 在1970年到現在的天數 * * @param date * @return 天數 */ public static long getDaysFrom1970(Date date) { String stringTime = DateUtil.getStringDateByDate(date, "-"); int year = Integer.parseInt(stringTime.substring(0, 4)); int month = Integer.parseInt(stringTime.substring(5, 7)); int day = Integer.parseInt(stringTime.substring(8, 10)); Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month - 1); c.set(Calendar.DAY_OF_MONTH, day); return (int) (c.getTimeInMillis() / 86400000); } /** * 獲得指定日期 在1970年到現在的天數 * * @param 年 * 月 日 * @return 天數 */ public static long getDaysFrom1970(int year, int month, int day) { Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month - 1); c.set(Calendar.DAY_OF_MONTH, day); return (int) (c.getTimeInMillis() / 86400000); } public static int differentDaysByMillisecond(Date date1, Date date2) { int days = (int) ((date2.getTime() - date1.getTime()) / (1000*3600*24)); return days; } /** * 獲得指定日期 在1970年到現在的天數 * * @param date 格式2013-03-05 中間的-可以是其他符號 或者沒有符號 * @param hasSplite 代表中間是否有符號,預設是有的,如果為false則日期的格式為:20130305 * @return 天數 */ public static long getDaysFrom1970(String stringTime,boolean hasSplite) { int year,month,day; if(hasSplite){ year = Integer.parseInt(stringTime.substring(0, 4)); month = Integer.parseInt(stringTime.substring(5, 7)); day = Integer.parseInt(stringTime.substring(8, 10)); }else{ year = Integer.parseInt(stringTime.substring(0, 4)); month = Integer.parseInt(stringTime.substring(4, 6)); day = Integer.parseInt(stringTime.substring(6, 8)); } Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month - 1); c.set(Calendar.DAY_OF_MONTH, day); return (int) (c.getTimeInMillis() / 86400000); } /** * 獲得今年年初的第一天日期 如2013-01-01 * * @param splite * 分隔符號 * @return 2013-01-01(字串形式) */ public static String getYearStartString(String splite) { String sDate = getNowStringDate(splite); int year = Integer.parseInt(sDate.substring(0, 4)); String yearStart = new StringBuffer().append(year).append(splite) .append("01").append(splite).append("01").toString(); return yearStart; } /** * 獲得今年年初的第一天日期 如2013-01-01 * * @return 2013-01-01日期格式 */ public static Date getYearStartDate() { String sDate = getNowStringDate("-"); int year = Integer.parseInt(sDate.substring(0, 4)); Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, 0); c.set(Calendar.DAY_OF_MONTH, 1); return c.getTime(); } /** * 獲得上個週末的 字串日期, 指星期日 * @param splite * 分隔符號 - * @return String 格式:2013-06-22 */ public static String getLastWeekStringDate(String splite) { String stringDate=getNowStringDate("-"); int year = Integer.parseInt(stringDate.substring(0, 4)); int month = Integer.parseInt(stringDate.substring(5, 7)); int day = Integer.parseInt(stringDate.substring(8, 10)); int sundayPlus=getSundayPlus(); Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month - 1); c.set(Calendar.DAY_OF_MONTH, day); c.add(Calendar.DATE, -sundayPlus);// 在此日期的基礎上減去sundayPlus就是上個週末的日期 return getStringDateByDate(c.getTime(), splite); } /** * 獲得上個週末的日期,date格式 * * @return Date */ public static Date getLastWeekDate() { String stringDate=getNowStringDate("-"); int year = Integer.parseInt(stringDate.substring(0, 4)); int month = Integer.parseInt(stringDate.substring(5, 7)); int day = Integer.parseInt(stringDate.substring(8, 10)); int sundayPlus=getSundayPlus(); Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month - 1); c.set(Calendar.DAY_OF_MONTH, day); c.add(Calendar.DATE, -sundayPlus);// 在此日期的基礎上減去sundayPlus就是上個週末的日期 return c.getTime(); } /** * 獲得上個月末的 字串日期 * @return String */ public static String getLastMonthStringDate(String splite) { String stringDate=getNowStringDate("-"); int year = Integer.parseInt(stringDate.substring(0, 4)); int month = Integer.parseInt(stringDate.substring(5, 7)); int day = Integer.parseInt(stringDate.substring(8, 10)); int monthPlus=getMonthPlus(); Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month - 1); c.set(Calendar.DAY_OF_MONTH, day); c.add(Calendar.DATE, -monthPlus);// 在此日期的基礎上減去sundayPlus就是上個週末的日期 return getStringDateByDate(c.getTime(), splite); } /** * 獲得上個月末的日期,date格式 * * @return Date */ public static Date getLastMonthDate() { String stringDate=getNowStringDate("-"); int year = Integer.parseInt(stringDate.substring(0, 4)); int month = Integer.parseInt(stringDate.substring(5, 7)); int day = Integer.parseInt(stringDate.substring(8, 10)); int monthPlus=getMonthPlus(); Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month - 1); c.set(Calendar.DAY_OF_MONTH, day); c.add(Calendar.DATE, -monthPlus);// 在此日期的基礎上減去sundayPlus就是上個週末的日期 return c.getTime(); } /** * 獲得上個季度末的 字串日期 * @return String 2012-03-30 */ public static String getLastQuarterStringDate(String splite) { String stringDate=getNowStringDate("-"); int year = Integer.parseInt(stringDate.substring(0, 4)); int month = Integer.parseInt(stringDate.substring(5, 7)); switch (month) { case 1: case 2: case 3: month=12; year--; break; case 4: case 5: case 6: month=3; break; case 7: case 8: case 9: month=6; break; case 10: case 11: case 12: month=9; break; default: break; } Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month);//這裡月份本來是要-1的,所以這裡就相當於月份month+1, c.set(Calendar.DAY_OF_MONTH, 1);//此時的日期剛好為month+1月份的一號 c.add(Calendar.DATE, -1);// 在1號的基礎上減去一天,就是month月末的日期 return getStringDateByDate(c.getTime(), splite); } /** * 獲得上個季度末的日期,date格式 * @return Date */ public static Date getLastQuarterDate() { String stringDate=getNowStringDate("-"); int year = Integer.parseInt(stringDate.substring(0, 4)); int month = Integer.parseInt(stringDate.substring(5, 7)); switch (month) { case 1: case 2: case 3: month=12; year--; break; case 4: case 5: case 6: month=3; break; case 7: case 8: case 9: month=6; break; case 10: case 11: case 12: month=9; break; default: break; } Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month);//這裡月份本來是要-1的,所以這裡就相當於月份month+1, c.set(Calendar.DAY_OF_MONTH, 1);//此時的日期剛好為month+1月份的一號 c.add(Calendar.DATE, -1);// 在1號的基礎上減去一天,就是month月末的日期 return c.getTime(); } /** * 獲得指定月份的,月末日期 * @param month 月 * @return String */ public static String getMonthEndStringDateByMonth(int month,String splite){ String stringDate=getNowStringDate("-"); int year = Integer.parseInt(stringDate.substring(0, 4)); Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month);//這裡月份本來是要-1的,所以這裡就相當於月份month+1, c.set(Calendar.DAY_OF_MONTH, 1);//此時的日期剛好為month+1月份的一號 c.add(Calendar.DATE, -1);// 在1號的基礎上減去一天,就是month月末的日期 return getStringDateByDate(c.getTime(), splite); } /** * 獲得當前日期與上週日相差的天數 按照外國的理解:星期日是第一天,星期一是第二天. 中國:星期一是第一天. * * @return int今天和上週日的相差日期 */ public static int getSundayPlus() { Calendar c = Calendar.getInstance(); // 獲得今天是一週的第幾天,星期日是第一天,星期二是第二天...... int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - 1; // 因為按中國禮拜一,作為第一天所以這裡減1 if(dayOfWeek==0){ dayOfWeek=7; } return dayOfWeek; } /** * 獲得當前日期與上個月末日期的相差天數 * * @return int 今天和上月末的相差日期 */ public static int getMonthPlus() { Calendar c = Calendar.getInstance(); // 獲得今天是一週的第幾天,星期日是第一天,星期二是第二天...... int dayOfMonth = c.get(Calendar.DAY_OF_MONTH); return dayOfMonth; } /** * 獲得兩個時間相差的時間間隔,以分鐘來計算 * @param time01 格式為:2012-02-02 08:08:20 * @param time02 格式為:2012-02-02 08:08:20 * @return 相差的分鐘數 */ public static long getTwoTimeInterval(String time01,String time02){ long t01=stringTimeToMilliseconds(time01); long t02=stringTimeToMilliseconds(time02); return Math.abs((t01-t02)/60000); } /** * 把一個字串日期 轉換成毫秒數 * @param time 格式為:2012-02-02 08:08:20 * @return 毫秒數 */ public static long stringTimeToMilliseconds(String time){ int year = Integer.parseInt(time.substring(0, 4)); int month = Integer.parseInt(time.substring(5, 7)); int day = Integer.parseInt(time.substring(8, 10)); int hour= Integer.parseInt(time.substring(11, 13)); int minus= Integer.parseInt(time.substring(14, 16)); int second= Integer.parseInt(time.substring(17, 19)); Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month - 1); c.set(Calendar.DAY_OF_MONTH, day); c.add(Calendar.HOUR_OF_DAY, hour); c.add(Calendar.MINUTE, minus); c.add(Calendar.SECOND, second); return c.getTimeInMillis(); } // java.util.Date 是 java.sql.Date 的父類 // java.sql.Date轉為java.util.Date // java.sql.Date date=new java.sql.Date(); // java.util.Date d=new java.util.Date (date.getTime()); 接著是UpbaaDate類
package com.p1.excel.XIRR; /** * * @author 小木樁(staker) 這個類是輔助計算xirr的類, 主要是以時間對應現金的形式組成一條現金流 而xirr則是由多條現金流計算出來的 */ public class UpbaaDate { public int year; public int month; public int day; public double payment;// 對應的現金 public UpbaaDate(int year, int month, int day, double payment) { this.year = year; this.month = month; this.day = day; this.payment = payment; } /** * * @param stringTime * 格式為:2013/02/05 * @param payment 對應的現金 */ public UpbaaDate(String stringTime, double payment) { try { this.year=Integer.parseInt(stringTime.substring(0, 4)); this.month=Integer.parseInt(stringTime.substring(5, 7)); this.day=Integer.parseInt(stringTime.substring(8, 10)); } catch (Exception e) { // TODO: handle exception } this.payment=payment; } /** * 使用預設構造方法的話,則對應的是當前的時間,即今天的時間 */ public UpbaaDate() { String stringTime= DateUtil.getNowStringDate("/"); setStringDate(stringTime); } /** * 設定年月日的字串格式的時間 * @param stringTime 格式為:2013/02/05 */ public void setStringDate(String stringTime){ try { this.year=Integer.parseInt(stringTime.substring(0, 4)); this.month=Integer.parseInt(stringTime.substring(5, 7)); this.day=Integer.parseInt(stringTime.substring(8, 10)); } catch (Exception e) { // TODO: handle exception } } /** * 獲得1970年到現在的天數 * @return long */ public long getDaysFrom1970(){ return DateUtil.getDaysFrom1970(year, month, day); } /** * 獲得字串的日期 * @param split 分隔符 如 - * @return 如:2013-02-22 */ public String getStringDate(String split){ if(split==null){ split="-"; } StringBuffer stringDate=new StringBuffer(); stringDate.append(year).append(split); if(month<10){ stringDate.append(0).append(month); }else{ stringDate.append(month); } stringDate.append(split); if(day<10){ stringDate.append(0).append(day); }else{ stringDate.append(day); } return stringDate.toString(); } }
// java.util.Date轉為java.sql.Date // java.util.Date utilDate=new Date(); // java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime()); }
接著是XirrData類 這裡面主要是計算方法
package com.p1.excel.XIRR; import java.util.ArrayList; /** * * @author 小木樁(staker) * 這是真正計算xirr演算法的類,通過傳進來的多條現金流進行計算xirr值和收益值 */ public class XirrData { private static final double Max_Rate=99999.9;//最大收益率 private static final double Min_Rate=-0.99999999;//最小收益率 private static final double Critical=0.00000001;//精確值 public static final int Error_Null_List=501;//代表傳進來的list為空 public static final int Error_Less_Cash=502;//少於一條現金流 public static final int Error_Date=503;//傳進來的現金流的第一條現金流記錄的時間不是最早的時間 public static final int Error_First_Payment=504;//第一條現金流的payment的值不為負 /** * 第一條現金流具體某個時間點的差值天數,這個天數應該是所有現金流裡面的差值天數最大的 */ private long startDays = 0; private ArrayList<UpbaaDate> listUpbaa; public XirrData(ArrayList<UpbaaDate> listUpbaa){ this.listUpbaa=listUpbaa; if (listUpbaa != null) { try { startDays = listUpbaa.get(0).getDaysFrom1970(); } catch (Exception e) { } } } /** * 計算收益值 * @return double */ public double getPal(){ if(listUpbaa==null){ return 0.0; } double pal=0; int count=listUpbaa.size(); for (int i = 0; i < count; i++) { pal=pal+listUpbaa.get(i).payment; } return pal; } /** * 通過傳進來的多條現金流獲得xirr值 * @return 返回收益率 */ public double getXirr() { if(listUpbaa == null){ return Error_Null_List; } int count=listUpbaa.size(); if (count <= 1) { return Error_Less_Cash;// 如果只有一條現金流則返回Error_Less_Cash } if (listUpbaa.get(0).payment > 0) { return Error_First_Payment; } for (int i = 0; i < count; i++) { if (listUpbaa.get(1).getDaysFrom1970() < startDays) { return Error_Date;// 如果不止一條現金流則判斷第一條現金流是否為時間最早的,如果不是的話則返回ERROR_DATE } } boolean isEarn = getXNPVByRate(0.1) > 0;// 記錄是賺錢了還是虧本了 double XIRR = 0; double tempMax = 0; double tempMin = 0; int calculateCount = 50; if (isEarn) { tempMax = Max_Rate; tempMin = 0; while (calculateCount > 0) { XIRR = (tempMin + tempMax) / 2f; double xnvp = getXNPVByRate(XIRR); if (xnvp > 0) { tempMin = XIRR; } else { tempMax = XIRR; } if (Math.abs(XIRR) < Critical) { break; } calculateCount--; } } else { tempMax = 0; tempMin = Min_Rate; while (calculateCount > 0) { XIRR = (tempMin + tempMax) / 2f; double xnvp = getXNPVByRate(XIRR); if (xnvp > 0) { tempMin = XIRR; } else { tempMax = XIRR; } if (Math.abs(XIRR) < Critical) { break; } calculateCount--; } } return XIRR; } private double getXNPVByRate(double rate) { double result = 0; int size = listUpbaa.size(); for (int i = 0; i < size; i++) { UpbaaDate date = listUpbaa.get(i); result = result + getOneValue(date.payment, rate, (int)date.getDaysFrom1970() - (int)startDays); } return result; } private double getOneValue(double payment, double rate, int dateDistance) { return payment / ((Math.pow((1 + rate), dateDistance / 365f))); } }
補上一個test類
package com.p1.excel.XIRR; import java.util.ArrayList; import java.util.List; //計算XIRR public class Xirr{ public static void main(String[] args) { ArrayList<UpbaaDate> list = new ArrayList<UpbaaDate>(); List<String> date = getDates(); List<Double> money = getCashFlow(); for(int i=0;i<date.size();i++){ list.add(new UpbaaDate(date.get(i),money.get(i))); } double xirr = new XirrData(list).getXirr();//普通XIRR System.out.println(xirr);//輸出 0.049039049520590336 } //準備測試資料--日期 public static List<String> getDates(){ List<String> list = new ArrayList<String>(); list.add("2018-09-30"); list.add("2019-05-30"); list.add("2020-08-30"); list.add("2021-08-30"); list.add("2022-08-30"); list.add("2023-08-30"); list.add("2024-08-30"); list.add("2025-08-30"); list.add("2026-08-30"); list.add("2027-08-30"); list.add("2028-08-30"); list.add("2029-08-30"); list.add("2030-05-30"); list.add("2018-09-30"); list.add("2018-09-30"); list.add("2018-09-30"); list.add("2018-09-30"); return list; } //準備測試資料--現金流(先負 後正) public static List<Double> getCashFlow(){ List<Double> list = new ArrayList<Double>(); list.add(-4054820.00); list.add(866704.00); list.add(978151.00); list.add(944035.00); list.add(1046535.00); list.add(1153022.00); list.add(-73762.00); list.add(1378584.00); list.add(1497983.00); list.add(1622023.00); list.add(1750882.00); list.add(1868534.00); list.add(864064.00); list.add(0.00); list.add(0.00); list.add(0.00); list.add(0.00); return list; } }
相關文章
- Hive是否支援in函式Hive函式
- openGauss 高階分析函式支援函式
- 遠端桌面函式不支援函式
- 拯救不會函式的我!!函式
- openGauss 函式及儲存過程支援函式儲存過程
- SqlServer中將字串轉utf-8的函式、支援中文的UrlEncode函式SQLServer字串函式
- 說說 Spring 支援的 AspectJ 切點函式Spring函式
- 函式計算支援 MySQL 例項繫結函式MySql
- 非線性支援向量機 與核函式函式
- 伺服器不支援:curl_exec函式伺服器函式
- apiAutoTest:支援自定義函式,用例中可呼叫API函式
- 事實上,回撥函式還不錯!!函式
- docx轉html方案驗證-支援latex,表格,圖片(poi)HTML
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- python3 筆記12.字串支援的函式Python筆記字串函式
- Spring Cloud資料流中的組合函式支援SpringCloud函式
- Excel 開始支援使用 JavaScript 編寫自定義函式ExcelJavaScript函式
- 支援向量機 (二): 軟間隔 svm 與 核函式函式
- swift-bridge支援從Swift呼叫非同步Rust函式Swift非同步Rust函式
- 詳解箭頭函式和普通函式的區別以及箭頭函式的注意事項、不適用場景函式
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- phpsimplexml_load_file函式執行不穩定PHPXML函式
- 『德不孤』Pytest框架 — 10、setUp()和tearDown()函式框架函式
- 2022年了你還不瞭解箭頭函式與普通函式的區別嗎?函式
- 恕我直言你可能真的不會java第8篇-函式式介面Java函式
- 第7章 IF函式 COUNTIF函式 SUMIF函式函式
- MySQL(四)日期函式 NULL函式 字串函式MySql函式Null字串
- (譯) 函式式 JS #2: 函式!函式JS
- JavaScript: window.onload = function() {} 裡面的函式不執行JavaScriptFunction函式
- 為什麼不建議函式有太多引數?函式
- 核函式 多項式核函式 高斯核函式(常用)函式
- 第 8 節:函式-匿名函式、遞迴函式函式遞迴
- lambda匿名函式sorted排序函式filter過濾函式map對映函式函式排序Filter
- PHP 都有,Go 憑什麼不支援命名引數呼叫函式?PHPGo函式
- 用 customRef 做一個防抖函式,支援 element 等UI庫。函式UI
- main函式的入口函式AI函式
- SQL-函式 - 聚合函式SQL函式