Festpunktarithmetik in ABAP – Was bedeutet das?
Hatten Sie schon mal das Problem, dass beim Rechnen mit Dezimalzahlen nicht die Werte in Ihrem ABAP Programm berechnet wurden, die Sie erwartet haben? Oder haben Sie sich bereits gefragt, welche Auswirkungen die Checkbox Festpunktarithmetik in den Eigenschaften eines ABAP Reports hat? Ich stelle Ihnen anhand eines einfachen Beispiels den Unterschied vor.
Die Situation
Schauen Sie sich das folgende Beispiel an, in dem wir simple Berechnungen mit Dezimalzahlen vornehmen. Welche Ergebnisse der einzelnen Ausgaben würden Sie erwarten? (Hinweis: Das Datenelement KWERT basiert auf dem Datentyp CURR mit 2 Dezimalstellen.)
Ihre Ergebnisse sind 15.46, 1.55 und 15.50? Mein Ergebnis sieht folgendermaßen aus.
Sie erhalten die Komplettlösung – Ihr Projekt machen wir zu unserem Projekt. Mit professionellem Projektmanagement sicheren wir den Projekterfolg.
Gerne spreche ich mit Ihnen über Ihre Ausgangslage und zeige Lösungsmöglichkeiten auf. Auf Wunsch unterbreite ich Ihnen im Anschluss ein unverbindliches Angebot.
Kontaktieren Sie mich: Telefon 0211.9462 8572-16 oder per E-Mail biermann@erlebe-software.de
Ingo Biermann, Fachbereichsleiter
Für Besucher von Erlebe Software können wir unseren Kurs „SAP ABAP für Anfänger: Komplexe Datenarten und Debugging“ mit kräftigem Rabatt anbieten.
SAP ABAP für Anfänger: Komplexe Datenarten und Debugging
Die Ursache
Der Grund für diese unerwarteten Ergebnisse ist die Festpunktarithmetik, die für ABAP Programme unter Springen -> Eigenschaften
eingestellt werden kann. Sie ist standardmäßig aktiviert.
Wenn die Einstellung deaktiviert ist, werden gepackten Zahlen bei Operationen als ganze Zahlen (Integer) behandelt. Dazu zählt der vordefinierte Datentyp P und auch die Dictionary Typen CURR, DEC oder QUAN. Das bedeutet, dass die durch den Datentyp definierten Dezimalstellen bei den Operationen nicht berücksichtigt werden und nur bei der Ausgabe der Werte eine Auswirkung haben (z.B. im Beispiel werden die letzten beiden Ziffern als Dezimalstellen genutzt). Wie im zweiten Schritt im obigen Beispiel zu sehen, wird bei Berechnungen auch auf die nächste ganze Zahl gerundet (154.56 / 10 = 15.46).
Das ist das Ergebnis, wie wir es erwarten würden, wenn die Festpunktarithmetik in ABAP Reports aktiviert ist.
Ich hoffe, dass dieser Artikel hilfreich für Sie ist. Wenn Sie Fragen haben oder Unterstützung brauchen kontaktieren Sie uns!