Brauche kurz eure Hilfe in Visual Basic / Taschenrechner

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Brauche kurz eure Hilfe in Visual Basic / Taschenrechner

    Hallo erstmal :),
    habe ein kleines Problem und zwar komme ich nicht weiter.
    Ich bin neu und versuche gerade einen Taschenrechner zu programmieren und hänge jetzt bei der Runden-Funktion.
    Ich möchte gerne, dass auf 2 Nachkommastellen gerundet wird und an sich funktioniert es auch, nur wenn ich eine Rechnung durchgeführt habe und dann die Runden-Funktion benutze wird auf ganze Zahlen gerundet und nicht auf 2 Nachkommastellen.
    Code:

    VB.NET-Quellcode

    1. Private Sub RoundBtn_Click(sender As Object, e As EventArgs) Handles RoundBtn.Click
    2. TextBox1.Text = CStr(Math.Round(Val(TextBox1.Text), 2))
    3. End Sub

    Wenn ihr helfen könntet, wäre ich euch sehr dankbar. :)

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Willkommen in Forum.
    Dein Threadtitel ist nicht besonders vielaussagend.
    Entferne mal den VB6-Namespace (Microsoft.VisualBasic) und mach Option Strict On, siehe Empfohlene Einstellungen.
    Bzgl. Deines Problems selbst kommt es wohl darauf an, wie Dein sonstiger Berechnungscode aussieht. Zeig den mal bitte. Denn wenn der natürlich schon mit Ganzzahlen arbeitet, kann die Round-Funktion auch keine Nachkommastellen mehr erzeugen. Dann kommst Du bei TextBox1.Text = Math.Round(Double.Parse(TextBox1.Text), 2).ToString raus. Ehm, Moment mal. Wo sind denn Deine Variablen, die Deine Werte speichern? TextBox1.Text ist keine Variable und auch kein geeigneter Platz, um Daten oder (Zwischen-)Ergebnisse zu speichern, sondern nur dafür da, Daten anzuzeigen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    @fadee Willkommen im Forum. :thumbup:
    Runde nicht die numerischen Werte, denn wenn Du weiterrechnest, geht die Genauigkeit verloren.
    Gerundet wird der Wert bei der Ausgabe:

    VB.NET-Quellcode

    1. Dim value = Math.PI
    2. Label1.Text = value.ToString("n2")
    3. Label2.Text = value.ToString("n3")
    4. Label3.Text = value.ToString("n4")
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    Danke erstmal für die Antworten :)

    VB.NET-Quellcode

    1. Private Sub DelBtn_Click(sender As Object, e As EventArgs) Handles DelBtn.Click
    2. If (TextBox1.Text.Length > 0) Then
    3. TextBox1.Text = TextBox1.Text.Substring(0, TextBox1.Text.Length - 1)
    4. End If
    5. End Sub
    6. Private Sub XBtn_Click(sender As Object, e As EventArgs) Handles XBtn.Click
    7. Zahl = TextBox1.Text
    8. TextBox1.Text = ""
    9. Calc = "*"
    10. Label1.Text = Zahl
    11. Label2.Text = Calc
    12. End Sub
    13. Private Sub GBtn_Click(sender As Object, e As EventArgs) Handles GBtn.Click
    14. Zahl = TextBox1.Text
    15. TextBox1.Text = ""
    16. Calc = "/"
    17. Label1.Text = Zahl
    18. Label2.Text = Calc
    19. End Sub
    20. Private Sub MBtn_Click(sender As Object, e As EventArgs) Handles MBtn.Click
    21. Zahl = TextBox1.Text
    22. TextBox1.Text = ""
    23. Calc = "-"
    24. Label1.Text = Zahl
    25. Label2.Text = Calc
    26. End Sub
    27. Private Sub PBtn_Click(sender As Object, e As EventArgs) Handles PBtn.Click
    28. Zahl = TextBox1.Text
    29. TextBox1.Text = ""
    30. Calc = "+"
    31. Label1.Text = Zahl
    32. Label2.Text = Calc
    33. End Sub
    34. Private Sub ErgBtn_Click(sender As Object, e As EventArgs) Handles ErgBtn.Click
    35. If Calc = "*" Then
    36. TextBox1.Text = Val(Zahl) * Val(TextBox1.Text)
    37. End If
    38. If Calc = "/" Then
    39. TextBox1.Text = Val(Zahl) / Val(TextBox1.Text)
    40. End If
    41. If Calc = "+" Then
    42. TextBox1.Text = Val(Zahl) + Val(TextBox1.Text)
    43. End If
    44. If Calc = "-" Then
    45. TextBox1.Text = Val(Zahl) - Val(TextBox1.Text)
    46. End If
    47. Label1.Text = ""
    48. Label2.Text = ""
    49. End Sub
    50. Private Sub RoundBtn_Click(sender As Object, e As EventArgs) Handles RoundBtn.Click
    51. TextBox1.Text = Val(Math.Round(Val(TextBox1.Text), 2))
    52. End Sub
    53. End Class

    das wäre jetzt alles zum berechnen..
    Mit

    VB.NET-Quellcode

    1. TextBox1.Text = Math.Round(Double.Parse(TextBox1.Text), 2).ToString
    scheint es zu funktionieren. Also in der Variable Zahl wird die erste Eingabe gespeichert und in Calc die Grundrechenart. Die Textbox dient halt nur zur Ausgabe des Ergebnisses. Deshalb dachte ich, dass ich ganz einfach TextBox1.Text runden kann, aber das war anscheinend nicht ganz so schlau:(
    Oha.
    Statt TextBox1 macht sich ein Name wie TxtAnzeige oder TxtDisplay oder irgendwas mit Aussagekraft besser.
    Statt TextBox1.Text = "" gibt es TextBox1.Clear().
    Zahl und Calc sind beide wohl vom Typ String. Zur Anzeige ok, aber zum Berechnen ...
    Zwischen Zeile#39 und #50 kann man statt vielen IF-Anweisungen auch ein Select Case nutzen.
    Punkt- vor Strichrechnung ist damit nicht möglich.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    @fadee Jou.
    Konvertuere zuerst den String TextBox1.Text in einen numerischen Wert Deiner Wahl: Beim Taschenrechner bietet sich Double an.

    VB.NET-Quellcode

    1. Dim value As Double
    2. If Not Double.TryParse(TextBox1.Text, value) Then
    3. MessageBox("Falscher Wert")
    4. Return
    5. End If
    So fängst Du ab, falls da "Roulade mit Klößen" in der TextBox steht.
    Besser, Du verhinderst, dass Buchstaben eingegeben werden können.

    VB.NET-Quellcode

    1. Zahl = TextBox1.Text
    2. TextBox1.Text = ""
    3. Calc = "+"
    4. Label1.Text = Zahl
    5. Label2.Text = Calc
    machst Du gleich so:

    VB.NET-Quellcode

    1. Zahl = TextBox1.Text
    2. Calc = "+"
    3. Label2.Text = Calc
    Noch besser ist es, Du verwendest für die Rechenoperatoren ein Enum, da fällt der String-Vergleich weg.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!