PPmt 函数

更新:2007 年 11 月

返回一个 Double 数据类型值,指定在年金(定期定额支付且利率固定)的指定期间内的本金偿付额。

Function PPmt( _
   ByVal Rate As Double, _
   ByVal Per As Double, _
   ByVal NPer As Double, _
   ByVal PV As Double, _
   Optional ByVal FV As Double = 0, _
   Optional ByVal Due As DueDate = DueDate.EndOfPeriod _
) As Double

参数

  • Rate
    必选。Double 指定各期利率。例如,如果您获得的汽车贷款的年利率 (APR) 为 10% 并实行按月偿付,则每期利率为 0.1/12,即 0.0083。

  • Per
    必选。Double 指定范围从 1 到 NPer 的付款周期。

  • NPer
    必选。Double 指定一笔年金的付款总期数。例如,如果您的汽车贷款期为四年并实行按月偿付,则您总共分 4 x 12(即 48)期偿付贷款。

  • PV
    必选。Double 指定一系列将来支付或收入的当前价值。例如,当您贷款买汽车时,对贷方而言,贷款金额就是您按月付款总额的现值。

  • FV
    可选。Double 指定最终支付后期望的未来值或现金余额。例如,因为贷款未来值是最终付款之后的值,所以它为 $0。但是,如果您要在 18 年里为子女受教育积攒 50,000 元,则 50,000 元就是未来值。如果省略,则假定为 0。

  • Due
    可选。DueDate 枚举类型对象,指定付款截止日期。该参数必须是 DueDate.EndOfPeriod(如果付款截止日期是在付款期末尾),或 DueDate.BegOfPeriod(如果付款截止日期是在付款期开始)。如果省略,则假定为 DueDate.EndOfPeriod。

异常

异常类型

错误号

条件

ArgumentException

5

Per <=0 或 Per > NPer。

如果正在升级使用无结构错误处理的 Visual Basic 6.0 应用程序,请参见“错误号”一列。(您可以根据 Number 属性(Err 对象)比较错误号。)然而,如果可能,应当考虑用 Visual Basic 的结构化异常处理概述替换这种错误控制。

备注

年金是一笔定期支付的固定数量现金。年金可以是一笔贷款(如住房抵押)或一笔投资(如按月储蓄计划)。

Rate 和 NPer 参数必须使用以相同单位表示的付款周期计算。例如,如果 Rate 按月计算,则 NPer 也必须按月计算。

对于所有参数,支付的现金(如存款)用负数表示;收到的现金(如股息支票)用正数表示。

示例

本示例使用 PPmt 函数计算当所有付款等值时特定期间的付款中有多少是本金。假设前提包括:每期利率 (APR / 12),本金部分所期望的付款期限 (Period),付款总期数 (TotPmts),贷款的现值或本金 (PVal),贷款的未来值 (FVal),以及一个用于指示付款截止时间是在付款周期的开始还是末尾的数字 (PayType)。

Sub TestPPMT()
    Dim PVal, APR, TotPmts, Payment, Period, P, I As Double
    Dim PayType As DueDate
    Dim Msg As String
    Dim Response As MsgBoxResult

    ' Define money format.
    Dim Fmt As String = "###,###,##0.00"
    ' Usually 0 for a loan.
    Dim Fval As Double = 0
    PVal = CDbl(InputBox("How much do you want to borrow?"))
    APR = CDbl(InputBox("What is the annual percentage rate of your loan?"))
    ' Ensure proper form.
    If APR > 1 Then APR = APR / 100
    TotPmts = CDbl(InputBox("How many monthly payments do you have to make?"))
    Response = MsgBox("Do you make payments at the end of month?", MsgBoxStyle.YesNo)
    If Response = MsgBoxResult.No Then
        PayType = DueDate.BegOfPeriod
    Else
        PayType = DueDate.EndOfPeriod
    End If
    Payment = Math.Abs(-Pmt(APR / 12, TotPmts, PVal, FVal, PayType))
    Msg = "Your monthly payment is " & Format(Payment, Fmt) & ". "
    Msg = Msg & "Would you like a breakdown of your principal and "
    Msg = Msg & "interest per period?"
    ' See if chart is desired. 
    Response = MsgBox(Msg, MsgBoxStyle.YesNo)
    If Response <> MsgBoxResult.No Then
        If TotPmts > 12 Then MsgBox("Only first year will be shown.")
        Msg = "Month  Payment  Principal  Interest" & vbNewLine
        For Period = 1 To TotPmts
            ' Show only first 12.
            If Period > 12 Then Exit For
            P = PPmt(APR / 12, Period, TotPmts, -PVal, FVal, PayType)
            ' Round principal.
            P = (Int((P + 0.005) * 100) / 100)
            I = Payment - P
            ' Round interest.
            I = (Int((I + 0.005) * 100) / 100)
            Msg = Msg & Period & vbTab & Format(Payment, Fmt)
            Msg = Msg & vbTab & Format(P, Fmt) & vbTab & Format(I, Fmt) & vbNewLine
        Next Period
        ' Display amortization table.
        MsgBox(Msg)
    End If
End Sub

要求

命名空间:Microsoft.VisualBasic

**模块:**Financial

**程序集:**Visual Basic 运行库(在 Microsoft.VisualBasic.dll 中)

请参见

参考

财务摘要

ArgumentException