按揭计算器剩余余额计算错误

时间:2012-08-15 04:46:21

标签: vb.net amortization

我正在编写一个抵押计算器,它将填写DataGridView的所有付款以及每笔付款的利息和本金。然后最后一列是付款后的余额。

问题在于:

按揭付款,利息和本金计算都很好,但由于某种原因,剩余余额计算似乎是错误的,因为在付款期结束时仍有很大余额。

我的代码可能很草率,因为我还是vb的新手。事实上,这是我的第一堂课。


Private Sub AmortButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AmortButton.Click 'initiate click event'
    Dim Amt As Double = Amount.Text() 'read in amount'
    Dim Intr As Double = Intrest.Text() 'read in intrest'
    Dim Yrs As Double = Term.Text() 'read in years'
    Dim payment As Double = (Yrs * 12) 'convert years to payment periods
    '
    Dim IntrDec As Double = ((Intr / 100) / 12) 'convert APR to monthly rate as a decimal'
    Dim TempAmt As Double = Amt 'setting Temperory balance
    For i As Double = 1 To payment Step i + 1 'setting for-loop paramaters'
        Dim MP = Math.Round((Pmt(IntrDec, payment, Amt) * -1), 2) 'calculate Mortgage payment'
        Dim IP = Math.Round((IPmt(IntrDec, i, payment, Amt) * -1), 2) 'calculate Intrest paid'
        Dim PP = Math.Round((PPmt(IntrDec, i, payment, Amt) * -1), 2) 'calculate priciple paid
        Amt = Amt - PP 'setting new balance'
        Dim RM = Math.Round((Amt), 2) 'rounding balance to two decimals'
        AmortTable.Rows.Add(i, MP, IP, PP, RM) 'adding row entry to table'
    Next 'end for-loop'

End Sub

2 个答案:

答案 0 :(得分:1)

循环中出现逻辑错误。您每次循环运行时都会更改贷款金额

Amt = Amt - PP 'setting new balance'

我注意到你在循环之上声明了TempAmt,所以看起来你预计在某个时候需要它:);每次递减而不是Amt并分配给RM

此外,STEP i+1不是必需的,虽然它在这里工作,但并不严格正确。当循环初始化时,它将循环迭代设置为i的值为PLUS 1的任何值。在这里你很幸运,因为i在开始时默认为零。最重要的是,STEP应该是一个常量,因为默认值是1,所以你根本就不需要它。

而paulsm4的建议也很有意义,但在像你这样的样本中,你可能会看到一些小的差异 - 例如最后只有几便士。浮点运算无疑是您未来课程中的一个主题。

答案 1 :(得分:0)

与VB.Net本身无关。

问题在于浮点数是“近似值” - 使用它们时有时会遇到“令人惊讶”的结果。类似地,当您混合浮点(例如“Intr”)和整数(例如“Intr / 100”)时,您也可以获得“惊喜”。

建议:

尝试将“i”和“payment”更改为“整数”,看看是否有任何不同的结果。

ALSO:

这些链接可能有所帮助: