vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Variablen/Strings · Algorithmen/Mathematik   |   VB-Versionen: VB4, VB5, VB625.05.07
Ceil-Funktion mit Fehler

Ceil: VBA-Int()-Funktion rechnet falsch

Autor:   Ralf AndersBewertung:  Views:  13.304 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11kein 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#))



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.