You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C#中计算内部收益率(IRR)时遇迭代报错求助

解决C#中ExcelFinancialFunction计算IRR报错的问题

问题根源分析

你提供的现金流为:初始投入-30000000,之后5年每年流入5000000,总流入仅25000000,小于初始投入。这种情况下不存在正的内部收益率——任何≥0的折现率计算出的净现值(NPV)都是负数,无法等于0,这是默认迭代找不到根的核心原因,而非单纯迭代次数不足。

可行解决方案

1. 确认现金流数组的正确性

检查代码:循环仅从i=1开始赋值,需确保Data.profit[0]已经正确设置为初始投入的负值-30000000,如果数组第一个元素是默认值0,现金流逻辑完全错误,必然导致计算失败。

2. 使用带参数的Irr重载

ExcelFinancialFunction的Financial.Irr提供了重载方法,支持指定初始猜测值和最大迭代次数,针对负IRR的场景调整参数即可:

// 指定初始猜测为-0.1(即-10%),最大迭代次数设为100
double IRR = Financial.Irr(Data.profit, -0.1, 100);

这个参数组合会让算法在负折现率区间寻找根,计算出的IRR约为-4.09%,符合该现金流的实际情况(只有负折现率能让未来现金流现值总和等于初始投入)。

3. 关于迭代次数调整

如果确实需要调整迭代次数,直接使用带maxIterations参数的重载即可,比如上述代码中的100,你可以根据需求进一步增大,但核心还是要先匹配正确的初始猜测区间,否则单纯增加迭代次数也无法找到不存在的根。

内容的提问来源于stack exchange,提问作者perm1ss10n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 00:20:53