PDA

Vollständige Version anzeigen : Runden


stoni
11.08.2001, 13:42
Hallo,

Ich möchte berechnete Währungs-Werte einer Abfrage auf 2 Stellen nach dem Komma runden. Gibt es in A97 dafür eine Funktion? Ich habe nix gefunden...

Danke schon mal!

Grüße Stoni

A.S.
11.08.2001, 13:57
Hallo Stoni,

ich wollt's letztens auch nicht glauben als ich's gelesen habe, aber probier mal

Format(Wert;"0,00")

Gruß

Arno

stoni
11.08.2001, 14:28
Hallo Arno,

danke für Tip, klappt aber nicht, da meldet A97, dass ein Typumwandlungsfehler vorliegt. Format macht dann aus der Zahl einen String.

Gruß Stoni

A.S.
11.08.2001, 14:58
Hallo Stoni,

na dann rechne diesen über die Wert()-Funktion doch wieder zurück! Solange das Ergebnis stimmt, machts doch nichts, oder?

Arno

Mad
11.08.2001, 15:08
Gefunden in www.access-home.de (http://www.access-home.de)

RundenZweiStellen = (Int((Wert * 100) + 0.5)) / 100


Gruß, Dietmar

A.S.
11.08.2001, 15:24
Hallo Stoni,
Hallo Mad,

so ich habe mich jetzt noch einmal auf die Suche nach dem Artikel auf den ich mich oben bezog gemacht und ihn (good luck [:D ) auch gefunden ;)

Hier: =RUNDEN(;0) (http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=45287)

Bei Karl Donaubauer wird man zu dem Thema im übrigen auch fündig:

-------------- Schnipp ------------------
2.1 RUNDEN


P r o b l e m
Es ist keine Funktion zur kaufmännischen Rundung zu finden.
Bei Versuchen mit den Funktionen INT und FIX kommt es zu Ungenauigkeiten oder Fehlern z.B. bei negativen Zahlen. CDouble usw. runden nicht kaufmännisch sondern mathematisch d.h. auf die nächste gerade Zahl. Das gleiche gilt für die ab A00 eingebaute VBA-Funktion Round z.B. ergibt Round(1.085, 2) 1.08
(s.a. http://support.microsoft.com/support/kb/articles/Q225/3/30.ASP)

U r s a c h e n
Access besitzt seltsamerweise keine eingebaute Funktion zur kaufmännischen Rundung.
Fließkommaberechnungen generell und Access-Datentypen sind ungenau.

L ö s u n g e n
Access-intern muss man sich einer selbstgebastelten Funktion bedienen.
Die kürzeste mir bekannte mit ausreichender Genauigkeit:

Function fctRound(varNr, Optional varPl = 2) As Double
' by Konrad Marfurt and ?, dressed ;-) by Karl Donaubauer

fctRound = Fix("" & varNr * (10 ^ varPl) + Sgn(varNr) * 0.5) / (10 ^ varPl)

End Function

Anmerkungen:
Auf vielfachen Wunsch habe ich Konrads Funktion behübscht, um sie leichter bedienbar zu machen.
Rundung auf 2 Dezimalstellen ist nun voreingestellt.
Bsp1: fctRound(1.025) - -> 1.03
Bsp2: fctRound(1.25, 1) --> 1.3
Bsp3: fctRound(1250, -2) --> 1300
Der Leerstring "" ist übrigens kein Fehler in der Funktion sondern der Haupttrick zwecks Genauigkeit.

Eine andere Möglichkeit zur kaufmännischen Rundung:
Falls Excel vorhanden ist, kann man die Excel-Tabellenfunktion Round verwenden (entspricht nicht der gleichnamigen VBA-Funktion). Beschreibung von Günther Ritter:

Man nehme:
Ein Modul, und Häkchen unter Extras.Verweise auf die EXCEL8.0 Library.
Beispiel Funktion für Runden:

Function RundZahl(a,b)
RundZahl=Excel.Application.Round(a, b)
End Function

---------------- Schnapp -------------------

Wobei mir die letzte Möglichkeit mit dem Nutzen der Excel-Funktion immer noch am besten gefällt, da weiß man wenigstens dat et korrekt zu sein scheint (sollte man bei MS ja immer einschränken, gelle! ;) :D

Gruß

Arno

kama
11.08.2001, 15:48
eine Einfache Methode zu runden ist die Typumwandlung

=Zlong(deinwert*100)/100 >>> für zwei stellen

Access rundet dann automatisch kaufmännisch
Bist dann nur im Zahlenraum begrenzt
von -2.147.483.648 bis 2.147.483.647

Bill Gates könnte sein Vermögen also nicht verwalten :)

Mad
11.08.2001, 18:20
Um Vermögen zu runden hätte ich noch eine Möglichkeit, mit

CCUR([Feld]/100)*100

müsste es auch gehen, denn CCUR oder ZCurrency rechnet immer auf 4 Stellen genau, bei "/100" werden zwei Stellen abgeschnitten und kaufmännisch gerundet.

Gruß, Dietmar

Ralf Nowak
11.08.2001, 20:49
Hier noch eine Methode zum Runden:

Fix("" & Wert / 0.01 + Sgn(Wert) * 0.5) * 0.01

Viel Spaß noch,
Ralf