我在 VB.NET 中使用 NPV() 函数来获取一组现金流的 NPV。
但是,NPV() 的结果与我手动执行计算的结果不一致(Investopedia NPV calc 也不符合我的手动结果)
我正确的手动结果和 NPV() 结果很接近,在 5% 以内.. 但不一样...
手动,使用 NPV 公式: NPV = C0 + C1/(1+r)^1 + C2/(1+r)^2 + C3/(1+r)^3 + .... + Cn/(1 +r)^n
手动结果存储在 RunningTotal 中,速率 r = 0.04,周期 n = 10
这是我的相关代码:
编辑:我在某个地方有 OBOB 吗?
YearCashOutFlow = CDbl(TxtAnnualCashOut.Text)
YearCashInFlow = CDbl(TxtTotalCostSave.Text)
YearCount = 1
PAmount = -1 * (CDbl(TxtPartsCost.Text) + CDbl(TxtInstallCost.Text))
RunningTotal = PAmount
YearNPValue = PAmount
AnnualRateIncrease = CDbl(TxtUtilRateInc.Text)
While AnnualRateIncrease > 1
AnnualRateIncrease = AnnualRateIncrease / 100
End While
AnnualRateIncrease = 1 + AnnualRateIncrease
' ZERO YEAR ENTRIES
ListBoxNPV.Items.Add(Format(PAmount, "currency"))
ListBoxCostSave.Items.Add("$0.00")
ListBoxIRR.Items.Add("-100")
ListBoxNPVCum.Items.Add(Format(PAmount, "currency"))
CashFlows(0) = PAmount
''''
Do While YearCount <= CInt(TxtLifeOfProject.Text)
ReDim Preserve CashFlows(YearCount)
CashFlows(YearCount) = Math.Round(YearCashInFlow - YearCashOutFlow, 2)
If CashFlows(YearCount) > 0 Then OnePos = True
YearNPValue = CashFlows(YearCount) / (1 + DiscountRate) ^ YearCount
RunningTotal = RunningTotal + YearNPValue
ListBoxNPVCum.Items.Add(Format(Math.Round(RunningTotal, 2), "currency"))
ListBoxCostSave.Items.Add(Format(YearCashInFlow, "currency"))
If OnePos Then
ListBoxIRR.Items.Add((IRR(CashFlows, 0.1)).ToString)
ListBoxNPV.Items.Add(Format(NPV(DiscountRate, CashFlows), "currency"))
Else
ListBoxIRR.Items.Add("-100")
ListBoxNPV.Items.Add(Format(RunningTotal, "currency"))
End If
YearCount = YearCount + 1
YearCashInFlow = AnnualRateIncrease * YearCashInFlow
Loop
编辑:使用以下值: 贴现率 = 4% 项目寿命 = 10 年现金流量 0 = -78110.00 现金流量 1 = 28963.23 现金流量 2 = 30701.06 现金流量 3 = 32543.12 现金流量 4 = 34495.71 现金流量 5 = 36565.45 现金流量流量 6 = 38759.38 现金流量 7 = 41084.94 现金流量 8 = 43550.03 现金流量 9 = 46163.04 现金流量 10 = 48932.82
使用http://www.investopedia.com/calculator/NetPresentValue.aspx上的计算器 并按照手册“教科书”公式得出相同的结果:
净现值:225,761.70 美元
我似乎无法让 NPV() 复制这个结果......它吐出 217,078.59 美元
我使用示例相同的值手动迭代它......所以他们必须使用与我不同的功能......
MSDN 页面示例明确指出初始费用应包含在现金流量列表中。