Visual Basic: Dezimalzahlen aus Textboxen addieren?

3 Antworten

Du könntest einfach das Komma durch einen Punkt ersetzen.

Wert = Val(Replace(Zahl,",","."))

Hat man eine Zahl ohne Komma, geht das auch. Dann wird durch Replace einfach nichts verändert.

Achtung: sollte jemand % eingeben (z.B. direkt nach der Zahl), wirft Val einen Laufzeitfehler. Besteht die Möglichkeit, dass das Zeichen verwendet wurde, könnte man das auch einfach durch was anderes ersetzen.


WasEineFrage 
Beitragsersteller
 22.07.2020, 07:20

Wie würde das im Code aussehen?

Sagen wir mal ich möchte TB1 und TB2 zu TB3 addieren.

holgerholg  22.07.2020, 07:25
@WasEineFrage

Z.B.

TB3.Text = Val(Replace(TB1.Text,",",".")+Val(Replace(TB2.Text,",",".")

Evtl. musst du statt Replace Strings.Replace schreiben.

holgerholg  22.07.2020, 07:33
@holgerholg

Willst du dich um die Prozent Zeichen kümmern, kannst du sie einfach ignorieren indem du die durch ein Zeichen ersetzt, bei dem Val abbricht.

Wert = Val(Replace(Replace(Zahl,",","."),"%","p")

Willst du % als Hundertstel verwenden, geht das auch:

Dim Wert1 As Double
Wert1 = Val(Replace(Replace(TB1.Text,",","."),"%","p")
If InStr(TB1.Text,"%") > 0 Then Wert1 = Wert1/100
'das gleiche für Wert2 und TB2.Text
TB3.Text = Wert1 + Wert2
holgerholg  22.07.2020, 07:38
@holgerholg

Sollten implizite Typumwandlungen aus sein (Option Strict On), so muss die letzte Zeile

TB3.Text = Str(Wert1 + Wert2)

heißen. Ansonsten ist das nicht nötig, aber auch nicht falsch.

Da du es mit Userinput zu tun hast musst du auch davon ausgehen, dass Unsinn statt einer Dezimalzahl drinsteht, deswegen ist es nötig mit einem TryParse oder Block zu prüfen ob die Zahl in ein Double oder Decimal umgewandelt werden kann.

Gegebenenfalls musst du mit Stringreplace Punkt zu Komma machen bzw umgekehrt und danach umwandeln.

Das Erebnis das du in Variablen hast kannst du mit ToString() wieder Formatgerecht in der Textbox anzeigen dabei bietet diese Methode eine Option einen Parameter mit zu geben der festlegt wie das Format auszusehen hat z.B. 1.000.000,00

Woher ich das weiß:eigene Erfahrung