最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Java巧妙解決Excel公式迭代計算

 更新時間:2023年10月24日 10:21:20   作者:葡萄城技術(shù)團(tuán)隊  
迭代計算其實(shí)是在?Excel?中,一種公式的循環(huán)引用,那么如何利用Java語言巧妙解決Excel公式迭代計算的問題呢,下面小編就來和大家詳細(xì)講講吧

什么是迭代計算

迭代計算其實(shí)是在 Excel 中,一種公式的循環(huán)引用,對于了解編程概念的同學(xué),很容易會想到另一個詞“遞歸”。

簡單的說,就是一段程序調(diào)用自己,反復(fù)執(zhí)行的邏輯。遞歸在編程中,屬于中高級用法,因為遞歸需要一個中斷的條件,對于初級的邏輯,遞歸很容易造成程序無限遞歸,出現(xiàn) Stack Overflow(堆棧溢出)。

在 Excel 里,也是一樣的,迭代計算指的是,公式引用中出現(xiàn)了循環(huán)引用。

舉個例子:

A1 = A1 + 1;

A1 的結(jié)果是多少?如下圖所示,通常 Excel 會通過提示,禁止循環(huán)引用的出現(xiàn)。

但是當(dāng)小編開啟迭代計算后,Excel 則允許循環(huán)引用。

此時,再看看剛才的公式,結(jié)果為 100。

所以,什么是迭代計算?

在 Excel 中,當(dāng)出現(xiàn)循環(huán)引用時,反復(fù)循環(huán)遞歸的計算,即為迭代計算。迭代次數(shù)及迭代誤差,可以在 Excel 的設(shè)置中配置。默認(rèn)為 100 次。

迭代計算的使用場景

在很多數(shù)學(xué)模型的計算中,沒有特定的公式進(jìn)行求解,而是需要不停的計算,反復(fù)逼近一個期望的結(jié)果。

同時,迭代計算也適用于水利工程,地質(zhì)工程的設(shè)計時的相關(guān)數(shù)據(jù)計算。

Java 中如何使用迭代計算

1. A1 = A1 + 1場景

接下來小編將以葡萄城公司的 Java API組件——GrapeCity Documents for Excel(以下簡稱為GcExcel)為例,為大家介紹如何在Java中實(shí)現(xiàn)迭代計算。

以上述提到過的A1 = A1 + 1 場景為例,下面是具體的代碼:

// Create a new workbook
Workbook workbook = new Workbook();

// Enable iterative calculation
workbook.getOptions().getFormulas().setEnableIterativeCalculation(true);
workbook.getOptions().getFormulas().setMaximumIterations(10);
IWorksheet worksheet = workbook.getWorksheets().get(0);
worksheet.getRange("A1").setFormula("=B1 + 1");
worksheet.getRange("B1").setFormula("=A1 + 1");

System.out.println("A1:" + worksheet.getRange("A1").getValue().toString());
System.out.println("B1:" + worksheet.getRange("B1").getValue().toString());
    
// Save to an excel file
workbook.save("IterativeCalculation.xlsx");

運(yùn)行程序,可以看到實(shí)現(xiàn)的效果:

結(jié)果值和使用Excel中使用公式的效果是一樣的,都是100。

2. IRR場景

接下來以 IRR 為例用 Excel 做一次計算。

IRR 的概念是,當(dāng) N 年的凈利潤為 0 時,內(nèi)部的收益率。

假設(shè)投資本金為 1 萬,每年收益如下,在 Excel 中,分別用迭代計算和 IRR 公式進(jìn)行計算。

IRR 是復(fù)利計算,假定 E7 和 E8 兩個格子分別是 IRR。那么通過 IRR,在 F8 中可以根據(jù)復(fù)利公式進(jìn)行計算。

其中 E7 為 IRR,IRR 需要使得上述的公式近似為 0。因此可以使用迭代計算來反推 IRR,E7 公式如下:

可以看到,小編一開始給 E7 定了一個初始值 0.3 (30%)。然后判斷 F7 (NPV)的值,凈值會隨著 IRR 變小,逐漸變大,而 - 0.000001,則是每一次計算,對于 IRR 的調(diào)整。假定當(dāng) NPV 大于 0 時,IRR 計算停止,只要每一次對 IRR 的調(diào)整足夠小,就可以近似的認(rèn)為當(dāng) NPV 大于 0 的那一次結(jié)果趨近于 0。

經(jīng)過反復(fù)計算,其結(jié)果如下:

那么在 Java 中,如何通過迭代計算來計算 IRR 呢?

通過借助GcExcel, 可以很方便的把剛才的公式直接放在代碼里即可進(jìn)行計算,代碼如下:

public void IRR() {
    // Create a new workbook
    Workbook workbook = new Workbook();

    // Enable iterative calculation
    workbook.getOptions().getFormulas().setEnableIterativeCalculation(true);
    workbook.getOptions().getFormulas().setMaximumIterations(1000000);
    IWorksheet worksheet = workbook.getActiveSheet();
    worksheet.getRange("B1").setValue(-10000);
    worksheet.getRange("B2").setValue(1000);
    worksheet.getRange("B3").setValue(1500);
    worksheet.getRange("B4").setValue(2300);
    worksheet.getRange("B5").setValue(3200);
    worksheet.getRange("B6").setValue(4600);
    worksheet.getRange("B7").setValue(6800);
    worksheet.getRange("E7").setFormula("=IF(E7 = 0,E7+1,IF(F7 < 0,E7-0.000001,E7))");
    worksheet.getRange("F7").setFormula("=B1+B2/(1+E7)+B3/(1+E7)^2+B4/(1+E7)^3+B5/(1+E7)^4+B6/(1+E7)^5+B7/(1+E7)^6");

    System.out.println("E7 IRR:" + worksheet.getRange("E7").getValue().toString());
}

計算結(jié)果:和 Excel 里計算的值基本一致。

到此這篇關(guān)于利用Java巧妙解決Excel公式迭代計算的文章就介紹到這了,更多相關(guān)Java Excel公式迭代計算內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring6當(dāng)中獲取Bean的四種方式小結(jié)

    Spring6當(dāng)中獲取Bean的四種方式小結(jié)

    Spring 為Bean 的獲取提供了多種方式,通常包括4種方式,(也就是說在Spring中為Bean對象的創(chuàng)建準(zhǔn)備了多種方案,目的是:更加靈活),本文將通過代碼示例詳細(xì)的給大家介紹了一下這四種方式,需要的朋友可以參考下
    2024-04-04
  • spring framework源碼調(diào)試技巧

    spring framework源碼調(diào)試技巧

    這篇文章給大家介紹了spring-framework源碼調(diào)試方法,可以直接將最新代碼clone到本地,如果想在代碼做一些注釋,也可以Fork到自己的倉庫。本文采用Fork的方式,并添加了測試module,感興趣的朋友一起看看吧
    2021-10-10
  • mybatisplus駝峰命名映射的問題解決

    mybatisplus駝峰命名映射的問題解決

    本文主要介紹了mybatisplus駝峰命名映射的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java編程線程同步工具Exchanger的使用實(shí)例解析

    Java編程線程同步工具Exchanger的使用實(shí)例解析

    這篇文章主要介紹了Java編程線程同步工具Exchanger的使用實(shí)例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 詳解Http協(xié)議以及post與get區(qū)別

    詳解Http協(xié)議以及post與get區(qū)別

    這篇文章主要介紹了詳解Http協(xié)議以及post與get區(qū)別,通過分別說明Http協(xié)議以及get與post各自的概念,再到兩者作比較有著詳細(xì)的說明,希望對你有所幫助
    2021-06-06
  • IDEA 包轉(zhuǎn)模塊的解決步驟

    IDEA 包轉(zhuǎn)模塊的解決步驟

    很多朋友遇到這樣一個問題,直接在idea拉取代碼,發(fā)現(xiàn)創(chuàng)建的模塊包類型不一樣了,類似這樣的問題該如何處理呢?很多朋友向小編求助,在這統(tǒng)一回答大家,需要的朋友參考下本文吧
    2021-06-06
  • Java中ArrayList的常見用法示例小結(jié)

    Java中ArrayList的常見用法示例小結(jié)

    本文介紹了Java的ArrayList,它是一個動態(tài)數(shù)組,可以自動調(diào)整大小,支持添加、刪除、獲取元素等操作,同時,還討論了如何存儲基本數(shù)據(jù)類型以及在多線程環(huán)境下的使用注意事項,感興趣的朋友一起看看吧
    2025-02-02
  • jmeter實(shí)現(xiàn)接口關(guān)聯(lián)的兩種方式(正則表達(dá)式提取器和json提取器)

    jmeter實(shí)現(xiàn)接口關(guān)聯(lián)的兩種方式(正則表達(dá)式提取器和json提取器)

    Jmeter用于接口測試時,后一個接口經(jīng)常需要用到前一次接口返回的結(jié)果,本文主要介紹了jmeter實(shí)現(xiàn)接口關(guān)聯(lián)的兩種方式,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 詳解Java如何使用責(zé)任鏈默認(rèn)優(yōu)雅地進(jìn)行參數(shù)校驗

    詳解Java如何使用責(zé)任鏈默認(rèn)優(yōu)雅地進(jìn)行參數(shù)校驗

    項目中參數(shù)校驗十分重要,它可以保護(hù)我們應(yīng)用程序的安全性和合法性。這篇文章主要介紹了如何使用責(zé)任鏈默認(rèn)優(yōu)雅地進(jìn)行參數(shù)校驗,需要的可以參考一下
    2023-03-03
  • 基于Java實(shí)現(xiàn)音頻播放功能

    基于Java實(shí)現(xiàn)音頻播放功能

    音頻播放是現(xiàn)代應(yīng)用程序中常見的一項功能,無論是在桌面應(yīng)用、游戲開發(fā)、媒體播放器、還是在廣告和提示音效中,下面我們就來看看如何使用Java實(shí)現(xiàn)簡單的音頻播放功能吧
    2025-03-03

最新評論

波密县| 泰安市| 东乌珠穆沁旗| 汉寿县| 南和县| 梅河口市| 沭阳县| 石景山区| 万宁市| 金川县| 浪卡子县| 沧源| 霍林郭勒市| 沂南县| 泰和县| 平罗县| 清水县| 漾濞| 图片| 阿勒泰市| 盐城市| 二连浩特市| 上犹县| 浦北县| 宁远县| 泰顺县| 广德县| 青岛市| 南安市| 融水| 专栏| 庆安县| 扶沟县| 四子王旗| 榆社县| 资中县| 虞城县| 通州区| 逊克县| 余庆县| 洪洞县|