Dezimalstellen verringern oder vergrößern

Dieses kleine Beispiel soll zeigen wie man die Anzahl der Dezimalstellen eines Wertes dynamisch zur Laufzeit verändern kann. Alles was man dazu benötigt ist ein Datenobjekt vom Typ p und den SAP Funktionsbaustein ROUND.

REPORT ZCHANGE_DECIMAL_PLACES.

DATA: obj_data TYPE REF TO data.
DATA: lv_value TYPE p DECIMALS 4 VALUE '100.8576'.
DATA: lv_decimals TYPE i VALUE 6.

FIELD-SYMBOLS: <lv_conv_value> TYPE any.

CREATE DATA obj_data TYPE p DECIMALS lv_decimals.
ASSIGN obj_data->* TO <lv_conv_value>.

CALL FUNCTION 'ROUND'
  EXPORTING
    decimals      = lv_decimals
    input         = lv_value
*   SIGN          = ' '
  IMPORTING
    output        = <lv_conv_value>
  EXCEPTIONS
    input_invalid = 1
    overflow      = 2
    type_invalid  = 3
    OTHERS        = 4.

Zuerst wird ein Datenobjekt mit 6 Dezimalstellen erzeugt. Danach wird der SAP Funktionsbausteines ROUND aufgerufen, welcher den Wert aus der Variable LV_VALUE rundet und in das eben erzeugte Datenobjekt ausgibt. Dieses sollte nun den Wert 100.857600 haben. Ändert man nun den Startwert der Variable LV_DECIMALS von 6 auf 2 und führt das Programm erneut aus, dann erhält man am Ende den gerundeten Wert 100.86.

Posted on 21. März 2015 in ABAP, Blog

Back to Top