0

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'

サブ終了

4

2 に答える 2

1

ループに論理エラーがあります。ループが実行されるたびにローンの金額を変更しています

Amt = Amt - PP 'setting new balance'

ループTempAmtの上で宣言したので、ある時点で必要になると予想していたようです:); Amt毎回の代わりにそれをデクリメントし、に割り当てますRM

また、これSTEP i+1は必須ではなく、ここでは機能しますが、厳密には正しくありません。iループが初期化されるときに、ループの反復をPLUS1の値に設定します。i最初はデフォルトでゼロになっているので、ここでは幸運です。結論として、STEPは定数である必要があります。デフォルトは値1であるため、ここではまったく必要ありません。

そして、paulsm4によるアドバイスも同様ですが、あなたが持っているようなサンプルでは、​​結果として小さな異常が見られる可能性があります。たとえば、最後に数ペニー程度です。浮動小数点演算は間違いなく、将来のクラスで取り上げるトピックです。

于 2012-08-15T14:10:10.437 に答える
0

VB.Net 自体とは何の関係もありません。

問題は、浮動小数点数が「概算」であることです。浮動小数点数を使用すると、「驚くべき」結果に遭遇することがあります。同様に、浮動小数点 (例: "Intr") と整数 (例: "Intr / 100") を混在させると、"驚き" を得ることができます。

提案:

"i" と "payment" を "integer" に変更してみて、異なる結果が得られるかどうかを確認してください。

また:

これらのリンクが役立つ場合があります。

于 2012-08-15T05:00:30.897 に答える