Visual Basic: Dezimalzahlen aus Textboxen addieren?
Guten Morgen.
Ich fasse es nicht, aber ich finde wirklich keine vernünftige Lösung, wie ich mit VB Zahlen mit Kommastellen addieren kann.
Versucht wurde:
Cbdl --> Der rundet die Zahlen aber auf oder ab (5,4 --> 5)
und
Val() --> Der ignoriert den Zahlenteil hinter der Kommastelle komplett. Er rechnet nur Zahlen mit Punktstellen (statt Komma)
Gibt es da einen passenden, am besten einfachen Code, der genau die Zahlen rechnet?
Vielen Dank im Vorraus
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.
Z.B.
TB3.Text = Val(Replace(TB1.Text,",",".")+Val(Replace(TB2.Text,",",".")
Evtl. musst du statt Replace Strings.Replace schreiben.
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
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
Wie würde das im Code aussehen?
Sagen wir mal ich möchte TB1 und TB2 zu TB3 addieren.