Kaufmännisch Runden

08/07/2008 - 15:35 von Wilfried Dietrich | Report spam
Hi NG'ler,

kaufmànnisch Runden ist sicherlich ein mehrfach abgehandeltes Thema.
Aber alles was ich im Netz gefunden habe, ist nach dem gleichen
Schema aufgebaut.

Function Runden(Zahl As Double, Dezimalanzahl As Integer) As Double
Runden = Int(Zahl * 10 ^ Dezimalanzahl + 0.5) / 10 ^ Dezimalanzahl
End Function

Mit einigen Zahlen funktioniert diese Funktion leider nicht!
U.a. wird damit z.B. 97,235 auf 97,23 gerundet.
Beispiel:
Debug.Print Runden (97.235, 2) 'liefert 97,23

Verwende ich hingegen die folgenden Funktionen dann ist alles OK.
Nur welche ist korrekter und schneller?

1.
Function Runden(Zahl As Double, Dezimalanzahl As Integer) As Double
Runden = Fix("" & Zahl * 10 ^ Dezimalanzahl + 0.5) / 10 ^ Dezimalanzahl
End Function

2.
Function Runden(Zahl As Double, Dezimalanzahl As Integer) As Double
Dim dBff As Double

dBff = Zahl * 10 ^ Dezimalanzahl + 0.5
dBff = Fix(dBff) / 10 ^ Dezimalanzahl
Runden = dBff
End Function

3.
Einfach Format verwenden, was spricht dagegen?:
dBff = Format(Zahl, "#.00")


1., 2. oder 3.?
Vor- und Nachteile?
In 1. und 2. habe ich absichtlich Fix an Stelle von Int, wegen den negativen
Zahlen, verwendet. Ist das korrekt?


Danke für Eure Antworten.
Gruß
Wilfried
 

Lesen sie die antworten

#1 Peter Götz
08/07/2008 - 17:54 | Warnen spam
Hallo Wilfried,

kaufmànnisch Runden ist sicherlich ein mehrfach
abgehandeltes Thema.
Aber alles was ich im Netz gefunden habe, ist
nach dem gleichen Schema aufgebaut.

Function Runden _
(Zahl As Double, Dezimalanzahl As Integer) _
As Double
Runden = Int(Zahl * 10 ^ Dezimalanzahl + 0.5) / _
10 ^ Dezimalanzahl
End Function

Mit einigen Zahlen funktioniert diese Funktion leider nicht!
U.a. wird damit z.B. 97,235 auf 97,23 gerundet.
Beispiel:
Debug.Print Runden (97.235, 2) 'liefert 97,23



Versuchs mal so:
Public Function RoundMct _
(ByVal dblNumber As Double, _
ByVal intDecimals As Integer _
) As Double

' kaumfmànnisches Runden auf intDecimals Stellen
Dim F As Variant
F = CDec(10 ^ intDecimals)
RoundMct = Int(CDec(dblNumber * F + 0.5)) / F
End Function

Debug.Print RoundMct(97.235, 2) -->> 97,24

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen