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.
Comments are closed.