2014-12-07 6 views
0

Я студент-программист первого года и пытаюсь сделать калькулятор платежей по ипотеке. Пользователи вводят сумму займа и процентную ставку, выбирают 15 или 30 лет на срок, и их ежемесячный платеж должен быть рассчитан. Я думаю, что математика правильная, но я думаю, что у меня возникают проблемы с преобразованием типов данных. Единственный результат, который я могу вычислить, - «Бесконечность». Я также пробовал объявлять все переменные как парные, но никакой разницы.Получите «бесконечность» в результате расчета платежей по закладной в Visual Basic

Ниже приведен фрагмент кода, с которым я столкнулся, и опция Strict On включена в полный код. Любые советы будут очень признательны!

Dim decLoanAmount As Decimal 
    Dim decInterestRate As Decimal 
    Dim decFifteen As Decimal = 180D 
    Dim decThirty As Decimal = 360D 
    Dim decNumberOfMonths As Decimal 
    Dim dblPayment As Double 
    Dim decPayment As Decimal 

    ' Did user enter a numeric value? 

    If IsNumeric(txtLoanAmount.Text) And IsNumeric(txtInterestRate.Text) Then 
     decLoanAmount = Convert.ToDecimal(txtLoanAmount.Text) 
     decInterestRate = Convert.ToDecimal(txtInterestRate.Text) 

     ' Is Loan Amount greater than zero? 
     If decLoanAmount > 0 And decInterestRate > 0 Then 
      If radFifteen.Checked = True Then 
       decNumberOfMonths = decFifteen 
      ElseIf radThirty.Checked = True Then 
       decNumberOfMonths = decThirty 
      End If 

      ' Calculate the monthly payments as a double 
      dblPayment = (decLoanAmount * (decInterestRate/12/100) * (1 + (decInterestRate/12/100) _ 
       ^decNumberOfMonths))/((1 + (decInterestRate/12/100)^decNumberOfMonths) - 1) 
      ' Convert double to decimal 
      decPayment = Convert.ToDecimal(decPayment) 
      ' Display monthly payment 
      lblPayment.Text = decPayment.ToString("C2") 

     Else 
      If decLoanAmount < 0 Then 
       MsgBox("Please enter a valid loan amount.", , "Input error") 
      End If 

      If decInterestRate < 0 Then 
       MsgBox("Please enter a valid interest rate.", , "Input error") 
      End If 

     End If 

    Else 
     ' Display error message if user entered a negative value. 
     MsgBox("Please enter a numeric value.", , "Input Error") 
    End If 
End Sub 
+1

Я предлагаю факторинговых его немного, и проверять эти значения как и следовало ожидать - например, '(decInterestRate/12/100)' повторяется в расчете, поэтому почему бы не рассчитать этот фронт и проверить значение так, как вы ожидали. –

+1

Кроме того, 'decPayment = Convert.ToDecimal (decPayment)' не собирается делать много ... –

+1

Вы не ожидаете, что люди здесь будут писать и/или отлаживать код для вас, не так ли? Покажите нам некоторые исследования, представите пример ввода, вывод, объясните немного больше. Предположите, что кода выше не было, думаете ли вы, что вы описали, чтобы помочь вам? – Neolisk

ответ

0

Основываясь на Wikipedia formula, вы не делаете это правильно. Это должно выглядеть примерно так:

dblPayment = (decLoanAmount * (decInterestRate/(12 * 100)))/(1 - (1 + (decInterestRate/(12 * 100)))^(-decNumberOfMonths)) 

Кроме того, эта линия странно

decPayment = Convert.ToDecimal(decPayment) 

Должно быть

decPayment = Convert.ToDecimal(dblPayment) 

 Смежные вопросы

  • Нет связанных вопросов^_^