Основные математические функции в VB.net

Итак, в настоящее время я добавляю базовый калькулятор, который позволяет пользователю определять 2 переменные, а затем нажимать кнопку, которая помещает переменные в базовое математическое уравнение и представляет результат, но я думаю, что поступил совершенно неправильно.

это мой первый раз, когда я использую математические функции в VB, и был бы признателен, если бы кто-нибудь мог показать мне, где я ошибаюсь.

это мой код до сих пор:

Imports System.Math
Public Class SOGACALC
Dim soga As String = Math.Abs(72 - months.Text) * opp.Text
Private Sub SOGACALC_Load(sender As Object, e As EventArgs) Handles MyBase.Load

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    SOGAValue.Text = soga
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    HOME.Show()
    Me.Close()
End Sub

End Class

person David Hosker    schedule 28.05.2017    source источник


Ответы (1)


Где вы написали

Dim soga As String = Math.Abs(72 - months.Text) * opp.Text

Я подозреваю, что вы ожидаете, что soga будет функцией свойств, упомянутых в этом, и изменится, когда эти свойства изменятся. Это не работает таким образом.

Способ получить значение, которое варьируется в зависимости от его параметров, — это определить функцию, поэтому у вас может быть:

Friend Function Soga(monthValue As Control, oppThing As Control) As String
    Dim month As Integer = CInt(monthValue.Text)
    Dim opp As Decimal = CDec(oppThing.Text)

    Return (Math.Abs(72 - month) * opp).ToString()

End Function

и назовите это так:

'TODO: Give Button1 a meaningful name.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    SOGAValue.Text = Soga(months, opp)
End Sub

где на форме есть названия элементов управления «месяцы» и «опп».

Я настоятельно рекомендую вам использовать Опция Strict On — указывает на проблемы в коде и предлагает исправления.

Обратите внимание, что я использовал тип Decimal для opp — мне пришлось угадывать подходящий тип, потому что нигде в коде, который вы нам показали, не было указаний на то, какой тип он должен быть.

Улучшением было бы использование методов TryParse вместо CInt/CDec, чтобы вы могли информировать пользователя, если он допустил простую опечатку.

person Andrew Morton    schedule 28.05.2017
comment
Из любопытства... есть ли способ установить возвращаемое значение, округленное до 2 знаков после запятой? я могу найти только вариант раунда, но он округляется до ближайшего целого числа, а не десятичного знака - person David Hosker; 29.05.2017
comment
@DavidHosker Метод Math.Round (десятичный, Int32, MidpointRounding) - person Andrew Morton; 29.05.2017