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.