Rubrik: Variablen/Strings · Algorithmen/Mathematik | VB-Versionen: VB4, VB5, VB6 | 25.05.07 |
Ceil-Funktion mit Fehler Ceil: VBA-Int()-Funktion rechnet falsch | ||
Autor: Ralf Anders | Bewertung: | Views: 13.304 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Bekanntermaßen heißt die Floor-Funktion zur Suche der größten ganzen Zahl, welche nicht größer als eine gegebene reelle Zahl ist, in VB6/VBA Int(). Man nennt das auch Abrunden. Eine Ceil-Funktion zum Aufrunden, also zur Suche der kleinsten ganzen Zahl, welche nicht kleiner als eine gegebene reell Zahl ist, fehlt leider in VB6/VBA.
Eine solche Funktion ist eigentlich so trivial, dass sie nicht einmal in der VBA-Hilfe für abgeleitete Funktionen erwähnt wird:
Public Function Ceil(ByVal dblZ As Double) As Long Ceil = -Int(-dblZ) End Function
Und doch sollte man sie bei Bedarf definieren und nicht direkt die Anweisung -Int(-dblExpr) verwenden!
Denn z.B. Ceil(1.05 * 20#) liefert korrekt 21, nicht aber -Int(-1.05*20#) !
Laut VB6/VBA ist -Int(-1.05*20#) = 22 ?!
Das lässt sich auch im Direktfenster mit folgender Zeile einfach nachvollziehen:
Debug.Print -Int(-1.05*20#)
Die Int-Funktion ist zumindest für Argumente, welche als arithmetische Ausdrücke formuliert werden und ein negatives Resultat liefern, nicht zu trauen. Wer ganz sicher gehen will, definiert auch noch eine triviale Floor-Funktion:
Public Function Floor(ByVal dblZ As Double) As Long Floor = Int(dblZ) End Function
Oder schreibt zumindest:
Int(CDbl(-1.05*20#))