version=1.1.0 vdate=24.08.2016 fname=cast_roundcurr.bas ns=%NAMESPACE% fpath=/vba/cast {{keywords>vba,castfunction}} ====== [VBA] roundCurr() ====== //Mit der Funktion roundCast() kann man schnell und einfach Währungsrundungen durchführen. Klassisches Beispiel ist die 5-Rappen-Rundung in der Schweiz. Auch andere Rundungen mit einer Genaugkeit lasen sich druchführen. // ==Version %%version%% - %%vdate%%== {{%%fname%%|Download %%fname%% (V-%%version%%)}} ===== Definition ===== roundedValue = roundCurr(value, precision [,roundType]) roundCurr(ByVal iValue As Double, ByVal iPrecision As Double, Optional ByVal iRoundType As rcRoundType = rcRound) As Double ***iValue** Wert der gerundet werde soll ***iPrecision** Genauigkeit. Achtung: Ist nicht die Anzahl Nachkommastellen. Auf ganze Zahlen Runden ist also nicht 0 sondern 1 (siehe Beispiele) ***iRoundType** Art wie gerundet werden soll. Siehe Enum rcRoundType ==== Enum rcRoundType ==== '/** ' * Type, wie die Funktion roundCurr() arbeiten soll. Normal runden, Aufrunden, Abrunden ' */ Public Enum rcRoundType rcRound '0 Normal runden roundCurr(3.6, 0.5) = 3.5 rcHalfDown '1 Alias zu normal. 0.5 wird abgerundet roundCurr(3.25, 0.5, rcHalfDown) = 3 rcHalfUp '2 Ab der Hälfte aufrunden roundCurr(3.25, 0.5, rcHalfUp) = 3.5 rcDowwn '3 immer abrunden roundCurr(3.4, 0.5, rcDowwn) = 3 rcUp '4 immer aufrunden roundCurr(3.1, 0.5, rcUp) = 3.5 End Enum ==== Beispiele ==== > Für die Ausgabe der Resultate verwendete ich die Funktion [[:vba:functions:print_r:]]. 'auf 5 Rappen genau: .12 wird abgerundet d roundCurr(123.12, 0.05) 123.1 'auf 5 Rappen genau: .13 wird aufgerundet d roundCurr(123.13, 0.05) 123.15 'auf 1 Franken runden d roundCurr(123.13, 1) 123 'auf 25 Rappen runden d roundCurr(123.13, 0.25) 123.25 'auf 50 Franken runden d roundCurr(123.13, 50) 100 Auf/Abrunden 'Normal runden d roundCurr(3.6, 0.5) 3.5 'Alias zu normal. 0.5 wird abgerundet d roundCurr(3.25, 0.5, rcHalfDown) 3 'Ab der Hälfte aufrunden d roundCurr(3.25, 0.5, rcHalfUp) 3.5 'immer abrunden d roundCurr(3.4, 0.5, rcDowwn) 3 'immer aufrunden d roundCurr(3.1, 0.5, rcUp) 3.5 ===== Code ===== Code zum importieren. Wenn er mit C&P in ein neus Modul eingefügt wird, dann muss die Zeile ''Attribute VB_Name = "cast_roundCurr"'' entfernt werden.