【发布时间】:2010-06-17 23:44:54
【问题描述】:
我在 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 页面示例明确指出初始费用应包含在现金流量列表中。
【问题讨论】:
-
NVP?这个函数是在哪个程序集中定义的。我看不到你在提供的代码示例中引用它。
-
Microsoft.Visualbasic msdn.microsoft.com/en-us/library/…
-
在下面查看我对我的回答的评论——我得到了适用于您的示例的 VB
NPV()函数。