我的计算是给我疯狂的数字...用字母

时间:2011-07-27 22:23:06

标签: vb.net

我希望有人可以指出我正确的方向,我在这里做错了什么。我是编程的新手,而且我正在为VB类做一个好的'按揭计算器。

我的代码应该给我一个月付款金额,但它只是让我疯狂。谁能发现我在这里做错了什么?我非常喜欢初学者,所以请在这里看看任何看似愚蠢的代码:

Public Class MortgageCalculator
'Module-level declarations
Const LOAN_AMOUNT_Integer As Integer = 200000
Const RATE_Double As Double = 0.0575
Const YEARS_Integer As Integer = 30

Private Sub CalculateButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CalculateButton.Click

    'Dim declaration and calculation
    Dim MonthlyPayment_Double As Double = (LOAN_AMOUNT_Integer * RATE_Double / (1 - (1 + RATE_Double ^ -YEARS_Integer)))

    ResultLabel.Text = MonthlyPayment_Double
End Sub

Private Sub MortgageCalculator_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CreditLabel.Click

End Sub

Private Sub ExitButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExitButton.Click
    'Exit the project

    Me.Close()

End Sub

Private Sub DescriptionLabel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DescriptionLabel.Click

End Sub
End Class

3 个答案:

答案 0 :(得分:3)

E的出现是因为双重格式化 - 请参阅蒂姆关于如何解决这个问题的优秀帖子。为什么你首先得到错误的数字是因为你的公式错了。您给出的价值是年费率,但每月复合一次。因此,您希望每次使用时将您的费率除以每年的月数,并将年数乘以每年的月数。 (此外,你需要将1 +利率提高到指数,而不仅仅是利率)

Dim MonthlyPayment_Double As Double = LOAN_AMOUNT_Integer * RATE_Double / 12 _
/ (1 - (1 + RATE_Double / 12) ^(-12 * YEARS_Integer))

答案 1 :(得分:1)

您正在尝试为文本(字符串)分配双精度数。您也可能获得指数(在结果中由E表示)。试试这个:

ResultLabel.Text = MonthlyPayment_Double.ToString("F2")

第二个将格式化小数点后2位数的字符串。

已修改删除第一条建议

答案 2 :(得分:0)

你的匈牙利表示法中的变量(除了控件之外)没有常备,看起来这一行就是问题所在:

Dim MonthlyPayment_Double As Double = (LOAN_AMOUNT_Integer * RATE_Double / (1 - (1 + RATE_Double ^ -YEARS_Integer)))

您的操作顺序可能不正确。它可能是:

Dim MonthlyPayment_Double As Double = (LOAN_AMOUNT_Integer * RATE_Double) / (1 - (1 + RATE_Double ^ -YEARS_Integer))

并且您还尝试将结果设置为文本字段:

ResultLabel.Text = Convert.ToString(MonthlyPayment_Double)