Operatoren in VBA
Grenzen der Größe und Genauigkeit
Bei Rechnungen mit Zahlen kommt es in VBA immer wieder zu Abweichungen von den schulmathematisch richtigen Ergebnissen . VBA rechnet also tatsächlich manchmal mehr oder weniger „falsch“! – jedenfalls verglichen mit den Erwartungen eines Lernenden. Tatsächlich richtet sich VBA aber oft nach der Norm IEEE 754, nach welcher die Ergebnisse dann korrekt sind.
- Direktbereich
? 0.1 + 0.2 - 0.3 2.77555756156289E-17 ? 100000000000000000000. + 1. - 100000000000000000000. 0 ? 3E-324 4.94065645841247E-324
Die Umstände, unter denen es zu solchen „Rechenfehlern“ kommen kann, müssen jedem ernsthaften Programmierer bekannt sein. Es wäre an dieser Stelle des Kurses aber noch zu früh, dieses Thema der möglichen Abweichungen vom mathematisch korrekten Ergebnis ausführlich zu behandeln. Vorläufig sollte man darauf achten, daß die Zahlen und die (Zwischen-)Ergebnisse nicht zu groß werden und wissen, daß Ergebnisse vom Typ »Double« in den hinteren Stellen (ungefähr nach der 14. Stelle) vom korrekten Ergebnis abweichen können.
Potenzieren
Das Zeichen »^« heißt „Zirkumflex“.
Einen Term wie »10²« kann man natürlich durch den Ausdruck »10*10« darstellen. In VBA kann man den Operator »^« zum Potenzieren verwenden.
- Direktbereich
? 10 ^ 2 100
Zu beachten ist, daß die Bindungskraft (Priorität) des Potenzierens höher ist als die aller anderen Operatoren, selbst als die des negativen Vorzeichens, so daß der Ausdruck »-1^2« den Wert »-(1^2)«, also den Wert »-1« hat. Dies zeigt auch deutlich, daß »-1« kein Numerale ist, denn dann wäre es immer eine Einheit (eine lexikalische Einheit).
Der Datentyp »Currency«
Der Datentyp »Currency« hat das Typ-Zeichen »@« und vermeidet einige der Probleme mit »double«, da er die ersten vier dezimalen Nachkommastellen genau abspeichert.
- Direktbereich
? 0.1# + 0.2# - 0.3#
2.77555756156289E-17
? 0.1@ + 0.2@ - 0.3@
0
Die Werte dieses Datentyps haben 15 Stellen vor dem Komma und 4 danach.
Der genaue Wertebereich geht von −922.337.203.685.477,5808 bis 922.337.203.685.477,5807.
Berechnungen mit »Currency« sind vermutlich etwas langsamer als Berechnungen mit »Double«.
Dieser Datentyp ist besonders für kaufmännische Berechnungen mit Währungsbeträgen gedacht.
Der Datentyp »Decimal« kann sogar noch etwas mehr Stellen speichern, ist aber schwieriger zu verwenden und wird deswegen an dieser Stelle des Kurses noch nicht weiter behandelt.
Priorität
- Priorität und Assoziativität der bisher behandelten Operatoren
() Eingeklammerter Ausdruck
^ Potenzieren
+ - Unaere vorangestellte Operatoren
/ * Division, Multiplikation
+ - Addition, Subtraktion
& Verkettung
[?] Ausgabe vorhersagen
Die folgende Eingabe gibt sieben Zeichen aus. Sagen Sie alle sieben Zeichen einzeln voraus!
Main.java
? 2E3 & ", " & 2 ^ 3