Как обращаться с неправильным форматом? - PullRequest
1 голос
/ 09 апреля 2019

Я работаю над программой, которая рассчитывает первоначальный взнос на дом с сложным процентом, накопленным за эти годы. Пользователь указывает сумму, которую он сэкономил, сумму годовых процентов (процентов) и количество лет, потраченных на накопление процентов.

Мне удалось выработать логику этого, используя цикл for. Мое назначение утверждает, что я также не должен принимать отрицательные числа или буквы, введенные в поле ввода. Здесь у меня проблемы.

Проблема 1: Если буквы вводятся в объект ввода «сбережения», программа вылетает и выдает следующий код ошибки: «Входная строка была в неправильном формате» ... это относится к следующая строка кода:

dubSavingsTotal = Convert.ToDouble(strSavingsTotal)

Проблема 2: Когда в поле ввода «Экономия» вводится отрицательное число, программа, похоже, игнорирует следующее выражение if

 If dubSavingsTotal < 0 Then

 strSavingsTotal = InputBox(strErrorMessageSavings, , "")
 End If

Пожалуйста, прости меня, но казалось, что самый простой способ сделать это - использовать операторы if / else, заявив, что если заданное значение меньше 0 или не является числовым, то появится окно сообщения, и пользователь получит будет предложено ввести другой номер в поле ввода.

Это то, что я пытался описать ниже в своем коде, если я имею в виду, что операторы предназначены для того, чтобы запретить пользователю вводить буквы или отрицательные числа в поле ввода сбережений. Спасибо всем за любую помощь, она очень ценится.

Option Strict On

Public Class frmhomedownpayment

Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
    'This Code is executed when the user clicks on the "Enter Savings Data" button
    'The user then enters the savings, interest and year values into an input box
    'The data is then displayed to the right of the application window, while the interest 
    'amounts are calculated and displayed in the listbox object. 


    'Declare Variables
    Dim dubSavingsTotal As Double
    Dim dubInterestTotal As Double
    Dim dubYearsTotal As Double
    Dim dublistTotal As Double

    Dim strSavingsTotal As String
    Dim strInterestTotal As String
    Dim strYearsTotal As String

    Dim strSavingsTotalMessage As String = "Enter your current savings"
    Dim strInterestTotalMessage As String = "Enter the annual interest amount."
    Dim strInterestTotalMessage2 As String = "The number should be entered as a percent (5 for 5%)"
    Dim strYearsTotalMessage As String = "Enter the Years"
    Dim strErrorMessageYears As String = "Data Error (Years) : Enter a Numeric Value greater than 0!"
    Dim strErrorMessageSavings As String = " Data Error (Savings) : Enter a Numeric Value greater than 0!"
    Dim strErrorMessageInterest As String = " Data Error (Interest) : Enter a Numeric Value greater than 0!"

    'Input Boxes
    strSavingsTotal = InputBox(strSavingsTotalMessage, " ")
    strInterestTotal = InputBox(strInterestTotalMessage & strInterestTotalMessage2, " ")
    strYearsTotal = InputBox(strYearsTotalMessage, " ")


    'Error Catching
    If Not IsNumeric(dubSavingsTotal) Then
        strSavingsTotal = InputBox(strErrorMessageSavings, , "")
    End If

    If dubSavingsTotal < 0 Then
        strSavingsTotal = InputBox(strErrorMessageSavings, , "")
    End If


    'Conversions to Double
    dubSavingsTotal = Convert.ToDouble(strSavingsTotal)
    dubInterestTotal = Convert.ToDouble(strInterestTotal)
    dubYearsTotal = Convert.ToDouble(strYearsTotal)


    'We want the entered number to be expressed as a percentage
     dubInterestTotal = dubInterestTotal / 100

     'Display the Data
     lblInterestTotal.Text = dubInterestTotal.ToString("P")
     lblYearTotal.Text = strYearsTotal.ToString
     lblSavingsTotal.Text = dubSavingsTotal.ToString("C")


     'A 'For' loop that calculates the interest amounts and displays them 
      to a listbox object
     ***starting from the first year***

        For dubYearsTotal = 1 To dubYearsTotal
            dublistTotal = ((dubInterestTotal * dubSavingsTotal) * 
            dubYearsTotal)
            lstTotals.Items.Add(dublistTotal + dubSavingsTotal)


        Next

End Sub

1 Ответ

0 голосов
/ 09 апреля 2019

Проблема 1:

  • Предполагается, что вы должны убедиться, что не передали недопустимые данные (например, строку с символами в них) в функцию.Вы можете попробовать Double.TryParse , но я попал сюда только через тег VBA, у меня нет опыта работы с VB.Net.
  • Существуют также другие способы проверки, если ввод является числом .

Задача 2:

  • Очевидно (ссылаясь на ваш комментарий: Значение в точке останова dubSavingsTotal = 0 ) что-то пошло не так во время преобразования, попробуйте вернуть значение dubSavingsTotal & strSavingsTotal и посмотрите, где преобразованиевыходит из строя.возможно, вместо этого попробуйте Double.Parse.

Пример:
Как я уже сказал, у меня есть опыт работы с VB.Net и нет способа протестировать этот код, но он долженработа в теории.Источники: MS Docs , Quora , Dream In Code

dim someString as String
dim someDouble as Double

if Double.TryParse(someString, someDouble) then
    Console.Write("Conversion successful, converted " & someString & " to " & someDouble)
else if
    Console.Write("Conversion failed, " & someString & " could not be converted")
end if
...