Variable Text und Zahl

Hallo
ich habe schon öfter das Problem gehabt, das ich mit Text und Zahlenvariablen rechnen muss.

Da ich meist Textliche Aufgaben erstelle und ausgebe, arbeite ich vorwiegend mit Textvariablen.

Naja da Berechnungen leider nicht ausblieben, sind doch Zahlenvariablen eingeflossen.

Das Problem ist, wenn ich Rechenoperationen zwischen beiden Typen mache, kommt es zu Fehlern (Abbruch, Rundungsfehler o.ä.), weil ich nicht genau weiss, wie man beide Typen verträglich macht.

Daher muss ich an diesen Stellen immer im Einzelschritt durchgehen, das die Berechnung stimmt.

Kann mir ma jmd erklären wie man die Typen verträglich macht, das auch die Berechnungen nicht in die Hose gehen.
Manchmal habe ich auch den Eindruck, das sich Variablen gar nicht berechnen lassen, wenn ich zb .Field.Value direkt aus einer Datenbank abgfrage. Hier muss man über Zwischenwerte gehen.

mfg Werner

Hallo Werner,

Kann mir ma jmd erklären wie man die Typen verträglich macht,
das auch die Berechnungen nicht in die Hose gehen.

grundsätzlich gar nicht.

Zum rechnen dürfen die Variablen keine Strings sein, Du musst sie erst in Zahlen umwandeln.

Tust Du das nicht, versucht VB das für Dich zu erledigen und das kann auch mal schief gehen.

Manchmal habe ich auch den Eindruck, das sich Variablen gar
nicht berechnen lassen, wenn ich zb .Field.Value direkt aus
einer Datenbank abgfrage. Hier muss man über Zwischenwerte
gehen.

Ja, wenn Dein Programm stabil laufen soll, dann rechne nicht mit Strings.

Das kann dann etwa so aussehen:

Dim Ergebnis As Double
Dim Txt1 As String, Txt2 As String
Dim Za1 As Double, Za2 As Double

If IsNumeric(Txt1) And IsNumeric(Txt2) Then
 Za1 = Cdbl(Txt1)
 Za2 = Cdbl(Txt2)
 Ergebnis = Za1 \* Za2
Else
 MsgBox "Beide Stringvariablen müssen Zahlen enthalten!"
End If

Direkt mit Strings zu rechnen ist Pfusch, verursacht gern mal Fehler und von mir hast Du das auch noch nicht gesehen.:smile:

Gruß Rainer

Hi Raini
das hab ich ja auch nicht gesagt, das das von dir stammt lol.
Das hab ich ganz allein erfunden *aufdieschulterklopf*

Ne ma im Ernst, teilweise geht das ja wenn man Text =STR$(Zahl) schreibt und umgekehrt ZAHL= Val(TEXT), wenn ZAHL und TEXT entsprechende Variablen sind.

Das klappt auch ganz gut, nur eben nicht immer ohne Kontrolle.
Zumal es scheinbar wichtig ist, ob man mit „,“ oder „.“ die Nachkommastellen abtrennt.

Dafür wollte ich eigentlich eine Aussage haben, wie sich das verhält.

mfg Werner

Hi Werner,

Ne ma im Ernst, teilweise geht das ja wenn man Text
=STR$(Zahl) schreibt und umgekehrt ZAHL= Val(TEXT), wenn ZAHL
und TEXT entsprechende Variablen sind.

Val() verwende ich nur, wenn ich genau weiß, daß immer nur Integer zurückgegeben werden, dann arbeitet das recht zuverlässig.
Val(„Test“) gibt aber auch eine Null zurück.
Wenn Du nicht sicher sein kannst, daß die Zahlen in den Strings immer zuverlässig richtig sind, dann solltest Du Val() an dieser Stelle nicht verwenden. Val() soll man auch nicht verwenden, das ist nur noch wegen Abwärtskompatibilität in VB6 enthalten.
Korrekt sind CStr(ZAHLt), CInt(TEXT), CLng(TEXT), CSng(TEXT) und CDbl(TEXT).

Das klappt auch ganz gut, nur eben nicht immer ohne Kontrolle.

Genau! Es ist unzuverlässig, wenn man sich auf den Inhalt der Strings nicht verlassen kann.

Zumal es scheinbar wichtig ist, ob man mit „,“ oder „.“ die
Nachkommastellen abtrennt.

Ja, ist es. Dazu gibt es im Archiv hier einen Code, der die Standardeinstellung ausliest und das Zeichen mit Replace() entsprechend korrigiert. Ausprobieren geht auch, wenn der Code nur auf einem Rechner laufen soll.

Dafür wollte ich eigentlich eine Aussage haben, wie sich das
verhält.

Verlasse Dich nicht darauf, daß Val() richtig arbeitet, erledige das lieber selbst, es vermeidet Fehler und überraschende, falsche Ergebnisse.

Gruß Rainer

1 Like

Hallo Nirwana,

Das Problem ist, wenn ich Rechenoperationen zwischen beiden
Typen mache, kommt es zu Fehlern (Abbruch, Rundungsfehler
o.ä.), weil ich nicht genau weiss, wie man beide Typen
verträglich macht.

? Was haben Rundungsfehler miz Text–>Zahl zu tun?
Abbruch? Mieser Code :smile:)

Daher muss ich an diesen Stellen immer im Einzelschritt
durchgehen, das die Berechnung stimmt.

Verbessere den Code.

Kann mir mal jmd erklären wie man die Typen verträglich macht,
das auch die Berechnungen nicht in die Hose gehen.

Ich wußte nicht daß Val unzuverlässig ist aber ich wandle auch selten um.
Auf die automatische Typumwandlung von Excel, ups, meine natürlich VB verlasse ich mich seltenst.

Soll dein Code bei Fremdusern laufen, die andre Dezimaltrennzeichen benutzen?

Dann nimm mal Code, dadrin eine Var(20). bestücke sie als Text mit allen möglichen Konstellationen die eine Zahl darstellen sollen.
Dann eine zweispaltige Listbox, links der Text, rechts das Ergebnis einer Funktion die jeden der Texte versucht in eine Zahl umzuwandeln.

Tja nun, in der Funktion setzt du das von Rainer um, ggfs. noch mehr.
Vielleicht soll ja nicht nur
1.2
umgewandelt werden sondern auch Schreibfehler wie
1…2

Gruß
Reinhard

Manchmal habe ich auch den Eindruck, das sich Variablen gar
nicht berechnen lassen, wenn ich zb .Field.Value direkt aus
einer Datenbank abgfrage. Hier muss man über Zwischenwerte
gehen.

mfg Werner