Ansicht
Dokumentation

ABENDEC_FLOATING_POINT_FUNCTIONS - DEC FLOATING POINT FUNCTIONS

ABENDEC_FLOATING_POINT_FUNCTIONS - DEC FLOATING POINT FUNCTIONS

rdisp/max_wprun_time - Maximum work process run time   Addresses (Business Address Services)  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- round, rescale

... round$|rescale( val = arg ...  ) ...

Wirkung

Die eingebaute Rundungsfunktionen erwarten als Hauptargument val eine dezimale Gleitpunktzahl und zusätzliche Argumente, die beschreiben, wie die dezimale Gleitpunktzahl behandelt wird. Der Typ des Rückgabewerts einer Rundungsfunktion ist immer decfloat34. Innerhalb eines arithmetischen Ausdrucks kann das Argument für die dezimale Gleitpunktzahl auch ein arithmetischer Ausdruck oder eine Funktion sein. Die anderen Argumente müssen immer als numerisches Datenobjekt angegeben werden.

Hinweis

Für die Normalisierung einer dezimalen Gleitpunktzahl enthält die Klasse CL_ABAP_MATH eine Methode NORMALIZE. In einer normalisierten Gleitpunktzahl hat die Mantisse keine schließenden Nullen.

Rundungsfunktion

Die Rundungsfunktion round kann mit folgender Syntax an Operandenpositionen eingesetzt werden:

... round( val = arg ${dec = n$}$|${prec = n$} $[mode = m$] ) ...

Wirkung

Diese Funktion rundet eine dezimale Gleitpunktzahl, die als Argument für den Parameter val angegeben wird. Ein für arg angegebenes Datenobjekt wird falls notwendig vor Ausführung der Funktion in den Datentyp decfloat34 konvertiert.

Es muss entweder der Parameter dec oder der Parameter prec mit einem Wert versorgt werden und es wird entweder auf eine Anzahl von Nachkommastellen oder auf eine Präzision gerundet:

  • Wenn der Parameter dec mit einem Wert versorgt wird, wird der Eingabewert auf die in n angegebene Anzahl von Nachkommastellen gerundet und zurückgegeben. Für n werden Datenobjekte vom Typ i erwartet, deren Wert nicht kleiner als -6144 sein darf. Bei Angabe eines negativen Wertes wird die entsprechende Vorkommastelle gerundet.
  • Bei der Angabe eines negativen Werts wird die entsprechende Vorkommastelle gerundet. Wenn der Parameter prec mit einem Wert versorgt wird, wird der Eingabewert auf die in n angegebene Präzision gerundet und zurück gegeben. Für n werden Datenobjekte vom Typ i erwartet, deren Wert größer als 0 sein muss.

Sowohl Skalierung als auch Präzision können bei einer Rundung verkleinert aber nicht vergrößert werden. Bei der Angabe von dec enthält die Mantisse des Rückgabewerts keine Nullen hinter der Stelle, auf die gerundet wurde. Bei der Angabe von prec wird der Eingabewert unverändert zurückgegeben, wenn die angegebene Präzision größer oder gleich der des Eingabewerts ist.

Der optionale Parameter mode bestimmt die Rundungsart. Für m können nur Werte angegeben werden, die als Konstante ROUND_... in der Klasse CL_ABAP_MATH vorhanden sind. Die folgende Tabelle enthält die möglichen Rundungsarten. Wenn mode nicht versorgt wird, wird kaufmännisch gerundet.

Konstante Rundungsart
ROUND_HALF_UP Es wird zum nächstliegenden gerundeten Wert gerundet. Falls der Wert genau in der Mitte zwischen zwei gerundeten Werten liegt, wird von der Null weg gerundet (kaufmännisches Runden).
ROUND_HALF_DOWN Es wird zum nächstliegenden gerundeten Wert gerundet. Falls der Wert genau in der Mitte zwischen zwei gerundeten Werten liegt, wird zur Null hin gerundet.
ROUND_HALF_EVEN Es wird zum nächstliegenden gerundeten Wert gerundet. Falls der Wert genau in der Mitte zwischen zwei gerundeten Werten liegt, wird zu dem Wert gerundet, dessen hinterste Stelle eine gerade Zahl ist.
ROUND_UP Es wird immer von der Null weg bzw. zum größeren Absolutwert hin gerundet.
ROUND_DOWN Es wird immer zur Null bzw. zum kleineren Absolutwert hin gerundet.
ROUND_CEILING Es wird immer in positive Richtung bzw. zum größeren Wert hin gerundet.
ROUND_FLOOR Es wird immer in positive Richtung bzw. zum größeren Wert hin gerundet.

Beispiel

Die folgenden Tabellen zeigen die Ergebnisse für das kaufmännische Runden der dezimalen Gleitpunktzahl 1234.56789 (Skalierung 5, Präzision 9) mit verschiedenen Werten für dec und prec. Die gezeigten Ergebnisse werden durch Ausführen des Programms DEMO_ROUND_AND_RESCALE erzeugt.

dec Ergebnis Skalierung Präzision
-5 0E+5 -5 1
-4 0E+4 -4 1
-3 1E+3 -3 1
-2 1.2E+3 -2 2
-1 1.23E+3 -1 3
0 1235 0 4
1 1234.6 1 5
2 1234.57 2 6
3 1234.568 3 7
4 1234.5679 4 8
5 1234.56789 5 9
6 1234.56789 5 9
prec Ergebnis Skalierung Präzision
1 1E+3 -3 1
2 1.2E+3 -2 2
3 1.23E+3 -1 3
4 1235 0 4
5 1234.6 1 5
6 1234.57 2 6
7 1234.568 3 7
8 1234.5679 4 8
9 1234.56789 5 9
10 1234.56789 5 9

Rundungsfunktion round

Reskalierungsfunktion

Die Reskalierungsfunktion rescale kann mit folgender Syntax an Operandenpositionen eingesetzt werden:

... rescale( val = arg ${dec = n$}$|${prec = n$} $[mode = m$] ) ...

Wirkung

Wirkung Diese Funktion ändert die Skalierung einer dezimalen Gleitpunktzahl, die als Argument für den Parameter val angegeben wird. Ein für arg angegebenes Datenobjekt wird falls notwendig vor Ausführung der Funktion in den Datentyp decfloat34 konvertiert.

Es muss entweder der Parameter dec oder der Parameter prec mit einem Wert versorgt werden, wobei entweder die Skalierung oder die Präzision gesetzt wird:

  • Wenn der Parameter dec mit einem Wert versorgt wird, wird der Eingabewert mit der in n angegebenen Skalierung zurückgegeben. Für n werden Datenobjekte vom Typ i erwartet, deren Wert nicht kleiner als -6144 sein darf. Wenn die Skalierung zu mehr als 34 Stellen in der Mantisse des Rückgabewerts führen würde, kommt es zu einer behandelbaren Ausnahme.
  • Wenn der Parameter prec mit einem Wert versorgt wird, wird der Eingabewert mit der in n angegebenen Präzision und entsprechend gesetzter Skalierung zurückgegeben. Für n werden Datenobjekte vom Typ i erwartet, deren Wert größer als 0 und weniger als 34 sein muss.

Sowohl Skalierung als auch Präzision können bei einer Reskalierung verkleinert und vergrößert werden. Bei einer Vergrößerung werden rechts Nullen eingefügt.

Der Eingabewert wird bei Bedarf gerundet. Mit dem optionalen Parameter mod kann wie bei der Funktion round die Rundungsart angegeben werden, wobei standardmäßig kaufmännisch gerundet wird.

Beispiele

Die folgenden Tabellen zeigen die Ergebnisse für die Reskalierung der dezimalen Gleitpunktzahl 1234.56789 (Skalierung 5, Präzision 9) mit verschiedenen Werten für dec und prec, wenn kaufmännisches Runden angegeben ist. Die gezeigten Ergebnisse werden durch Ausführen des Programms DEMO_ROUND_AND_RESCALE erzeugt.

dec Ergebnis Skalierung Präzision
-5 0E+5 -5 1
-4 0E+4 -4 1
-3 1E+3 -3 1
-2 1.2E+3 -2 2
-1 1.23E+3 -1 3
0 1235 0 4
1 1234.6 1 5
2 1234.57 2 6
3 1234.568 3 7
4 1234.5679 4 8
5 1234.56789 5 9
6 1234.567890 6 10
7 1234.5678900 7 11
8 1234.56789000 8 12
prec Ergebnis Skalierung Präzision
1 1E+3 -3 1
2 1.2E+3 -2 2
3 1.23E+3 -1 3
4 1235 0 4
5 1234.6 1 5
6 1234.57 2 6
7 1234.568 3 7
8 1234.5679 4 8
9 1234.56789 5 9
10 1234.567890 6 10
11 1234.5678900 7 11
12 1234.56789000 8 12






Addresses (Business Address Services)   Fill RESBD Structure from EBP Component Structure  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 30963 Date: 20240523 Time: 175214     sap01-206 ( 189 ms )