我希望有人可以指出我正确的方向,我在这里做错了什么。我是编程的新手,而且我正在为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
答案 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)