Ansicht
Dokumentation

ABENROUNDING_ERROR_GUIDL - ROUNDING ERROR GUIDL

ABENROUNDING_ERROR_GUIDL - ROUNDING ERROR GUIDL

TXBHW - Original Tax Base Amount in Local Currency   SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Rundungsfehler

Bei Zuweisungen zwischen Gleitpunktzahlen (Typen f, decfloat16 und decfloat34) und Festpunktzahlen (Typen i und p) treten in der Regel Rundungsfehler auf, die den Wert verfälschen. Umgekehrt werden Werte, die vom Typ p (und auch decfloat16,decfloat34) an den Typ f zugewiesen werden, auch nicht immer genau dargestellt.

Unnötige Rundungsfehler vermeiden

Vermeiden Sie wegen der dabei auftretenden Rundungsfehler unnötige oder häufige Umrechnungen zwischen Gleit- und Festpunktzahlen.

Innerhalb eines Programms sollte der Wert einer Zahl immer möglichst lange in einem Datenobjekt mit dem numerischen Datentyp der höchsten benötigten Genauigkeit gehalten werden. Dies gilt insbesondere für das Abspeichern von Zwischenergebnissen bei Berechnungen.

Keinesfalls sollten die Erfordernisse einer Dateneingabe oder Datenausgabe, wie zum Beispiel die Aufbereitung auf dem Bildschirm oder in einer Spool-Liste, die interne Ablage von Zahlen beeinflussen. Ist die Aufbereitung einer Zahl mit einer bestimmten Anzahl von Nachkommastellen erforderlich, sollte keine Konvertierung des tatsächlichen Wertes in eine entsprechende gepackte Zahl stattfinden. Stattdessen ist eine geeignete Aufbereitung in einem zeichenartigen Feld mit den dafür vorgesehenen Sprachmitteln vorzunehmen. Dies sind Zeichenketten-Templates und zuvor die Anweisung WRITE TO.

Folgender Quelltext zeigt eine Berechnung, in der Ergebnisse einem zur Ausgabe vorgesehenen numerischen Feld zugewiesen werden. Durch die dabei durchgeführten Rundungen ist das Ergebnis 56.00 statt 55.55.

DATA: output     TYPE p DECIMALS 2,
      percentage TYPE decfloat34,
      value TYPE decfloat34.
percentage = '55.55'.
value      = '100.0'.
output = percentage / 100.
output = value * output.

Folgender Quelltext korrigiert obiges Beispiel durch die Trennung in für Berechnungen vorgesehene Datenobjekte und ein zeichenartiges Datenobjekt für die aufbereitete Ausgabe.

DATA: result TYPE decfloat34,
      percentage TYPE decfloat34,
      value TYPE decfloat34.
DATA output TYPE c LENGTH 40.
percentage = '55.55'.
value      = '100.0'.
result = percentage / 100.
result = value * result.
WRITE result TO output DECIMALS 2 EXPONENT 0.






Vendor Master (General Section)   CPI1466 during Backup  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 2878 Date: 20240523 Time: 104926     sap01-206 ( 47 ms )