VB-Homepage Tipp 402

Variablendeklaration / Temporärvariablen

1. Integer/Long
Eine Integer Variable kann Werte von -32.768 bis 32.767 aufnehmen.
Eine Long Variable kann Werte von -2.147.483.648 bis 2.147.483.647 aufnehmen.

Wenn wir dies zur Kenntnis nehmen, dann stimmen Sie mir sicher zu, daß folgendes Beispiel für unsere Long Variable kein Problem darstellen dürfte.

'#####################################
Dim Summe As Long              'Das Ergebnis
Dim Operator As Integer       'Operator

Operator = 5000
Summe = Operator * 10
'#####################################

Das Ergebnis ist 50000 und paßt ohne Mühe in die Long Variable.

Aber testen Sie dieses Beispiel und VB wird Ihnen etwas von
"Laufzeitfehler '6' - Überlauf" erzählen.

Wie das?
Warum man das so gelöst hat, kann ich Ihnen plausibel auch nicht erklären,
aber was die Ursache ist, dafür gibt es schon eine Begründung und die heißt
Temporärvariable.
VB ermittelt bei einer Operation die beteiligten Variablen und erstellt sich eine eigene Temporärvariable für die Berechnung.
Für diese Variable wird die größte deklarierte Variable verwendet, aber eben nur von den Operatoren und nicht von der Ergebnisvariable. Unser "Summe" als deklarierte Long Variable hat keinen Einfluß darauf, vielmehr ist die Deklaration
der Variable "Operator" als Integer "Schuld" am Überlauf.
Lassen Sie die Deklaration weg, gelingt die Operation.

Nun werd ich mit Sicherheit nicht dazu aufrufen, die Deklaration wegzulassen,
da können Sie ja gleich jemand anderes Ihren Code schreiben lassen.
Sollten Sie aber mal wieder auf einen Überlauf treffen, wissen Sie jetzt,
woran es auch liegen kann.

Umgehbar wäre dies auch durch die "Deklaration vor Ort".
Dann würde unser Beispiel so aussehen.

'#####################################
Dim Summe As Long              'Das Ergebnis
Dim Operator As Integer       'Operator

Operator = 5000
Summe = Operator * 10&
'#####################################

Dies deklariert den zweiten Operator als Long und schon geht's.


2. Ganzzahlen/Fließkomma
Sie möchten aus einer Division von zwei Zahlen, nur den Ganzzahlanteil ermitteln.
Dann könnte unser Beispiel folgendermaßen aussehen.

'#####################################
Dim Ergebnis As Long
Dim Operator1 As Long
Dim Operator2 As Long

Operator1 = 3
Operator2 = 2

Ergebnis = Operator1 / Operator2
'#####################################

Der korrekte Inhalt der "Ergebnis" Variable müßte also 1 lauten.
Tut er aber nicht, da bei der Übergabe aus der Temporärvariable an die Long Variable "Ergebnis" eine Rundung erfolgt und so enthält "Ergebnis" eine 2 als Wert.
Und das obwohl alle beteiligten Variablen Ganzzahlvariablen sind.

Und nicht einmal rechnen bräuchten Sie dafür. Schon die Zuweisung genügt.
Dim Ergebnis As Long   -    Ergebnis = 1.5
Auch hier enthält die Variable "Ergebnis" eine 2 als Wert.

Abhilfe kann es hier auf zwei Wegen geben, entweder durch

Ergebnis = Int(Operator1 / Operator2)    oder einfacher durch
Ergebnis = Operator1 \ Operator2         

Der Backslash steht als Operator für Ganzzahldivision


Tipp-Download

Quelle :

Zurück zur Übersichtsseite