Aber das steht doch alles in der Dokumentation
:
Kurztext
Rundung auf vorgeg.Anzahl Dezimalen (Aufrundung, Abrundung, Kaufm.Rundung)
Funktionalität
Dieser Funktionsbaustein rundet den Wert INPUT auf ANDEC Dezimalen. Abhängig vom Parameter SIGN wird abgerundet('-'), aufgerundet('+') oder kaufmännisch gerundet('X').
Ist SIGN = SPACE, so erfolgt keine Rundung (OUTPUT = INPUT).
Beispiel
Der Wert VALUE soll auf Hunderter aufgerundet werden.
DATA: VALUE TYPE F,
ROUND_VALUE TYPE F.
...
CALL FUNCTION 'ROUND'
EXPORTING
DECIMALS = 2-
INPUT = VALUE
SIGN = '+'
IMPORTING
OUTPUT = ROUND_VALUE
EXCEPTIONS
INPUT_INVALD = 01
OVERFLOW = 02
TYPE_INVALID = 03.
Hinweise
Beim Rechnen mit Floats kann in bestimmten Fällen das Rundungsergebnis durch Rundungsfehler bei der Rechnung verfälscht sein.
Ist INPUT ein Feld vom Typ P, so wird intern ebenfalls mit gepackten Zahlen gerechnet. Dies ist zwar teurer, aber auch genauer. Ist die Rechengenauigkeit sehr wichtig, sollte daher INPUT ein Feld vom Typ P sein.
Einfach das Beispiel in einen Report stellen und testen:
DATA: VALUE TYPE p decimals 2,
ROUND_VALUE TYPE p decimals 2.
value = '3907.98'.
CALL FUNCTION 'ROUND'
EXPORTING
DECIMALS = '2-'
INPUT = VALUE
SIGN = '-'
IMPORTING
OUTPUT = ROUND_VALUE
EXCEPTIONS
INPUT_INVALD = 01
OVERFLOW = 02
TYPE_INVALID = 03.
WRITE: value, round_value.
Et voilà:
3.907,98 3.900,00
mal ruhig ein wenig selber probieren, so schwer ist das in diesem Fall ja nicht