Division durch 0 vermeiden

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
7 Beiträge • Seite 1 von 1
7 Beiträge Seite 1 von 1

Division durch 0 vermeiden

Beitrag von Gast ( / / 0 / 3 ) »
Hallo,
bei einer Division durch den Wert 0 kommt es zu einem Shortdump (is ja klar).
Mich würde jetzt aber einmal interessieren, wie man diese am Besten abfängt.
Mir würde da nur das Setzen eines RC einfallen (wenn ja wie am geschicktesten?), oder eben eine IF in der Art

Code: Alles auswählen.

IF x = 0.
 x = '0.00000001'.
ENDIF.

* Hier folgt die normale Berechnung

Wie macht man so etwas in der Praxis? Vielleicht kann es mir jmd verraten...

Grüsse,

Thomas

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Moinsen

Code: Alles auswählen.

DATA:
    : x TYPE i VALUE 0
    .
CATCH SYSTEM-EXCEPTIONS
    bcd_zerodivide           = 1
    compute_int_zerodivide   = 2
    compute_float_zerodivide = 3.
  x = 1 / x.
ENDCATCH.

IF sy-subrc <> 0.
  WRITE: 'Division durch 0'.
ENDIF.
Im vorliegenden Fall wird der SUBRC = 2 sein, da es sich um eine Integer-Variable handelt.

Gruss,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Beitrag von Gast ( / / 0 / 3 ) »
Hallo Haubi,
danke für die schnelle Info. Leider habe ich im Moment keinen Zugriff auf das System, aber ich werde Deinen Vorschlag - der übrigens ziemlich gut aussieht - gleich morgen früh ausprobieren, und Dir dann Bescheid geben.

Grüsse,
Thomas

Beitrag von Gast ( / / 0 / 3 ) »
Falls 'X' eine User-Eingabe sein soll, muss programmtechnisch dafür gesorgt werden, dass der User etwas eingibt/eingeben muss.

Man sollte also daraufhin "arbeiten", dass es gar nicht dazu kommt, dass "X" den Wert '0' erhält.

Dieses "ins Messer laufen lassen" (Kinders, es ist ein Scherz!!!), ist die schlechteste und letzte aller Lösungen, DIE jedoch auch ihre Daseinsberechtigung hat.

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Anonymous hat geschrieben:Falls 'X' eine User-Eingabe sein soll, muss programmtechnisch dafür gesorgt werden, dass der User etwas eingibt/eingeben muss.
Full Ack.
Man sollte also daraufhin "arbeiten", dass es gar nicht dazu kommt, dass "X" den Wert '0' erhält.

Dieses "ins Messer laufen lassen" (Kinders, es ist ein Scherz!!!), ist die schlechteste und letzte aller Lösungen, DIE jedoch auch ihre Daseinsberechtigung hat.
Im Verlaufe komplizierter Berechnungen kann es aber vorkommen, dass eine Variable den Wert "0" erhält. Ich finde es eleganter, einen potenziellen Laufzeitfehler abzufangen statt endlose IF-Orgien zu kodieren, die der Pretty Printer dann in unüberschaubare Einrückungen konvertiert... Bild :wink:

Übrigens kann man auch mittels der "Fehlerklassen" ARITHMETIC_ERRORS und CONVERSION_ERRORS so ziemlich alle bei Berechnungen auftretenden Fehler abfangen:

Code: Alles auswählen.

CATCH SYSTEM-EXCEPTIONS
      arithmetic_errors = 1
      conversion_errors = 2.
Gruss,
Haubi

Beitrag von Gast ( / / 0 / 3 ) »
Also, ich habe jetzt den Vorschlag von Haubi umgesetzt, und es funktioniert einwandfrei.
Leider gibt es hier keine Möglichkeit, es gar nicht erst zu Fehlern kommen zu lassen (dieser Ansatz ist natürlich absolut richtig).
Es sind verschiedene Variablen enthalten, die zwar unwahrscheinlich den Wert 0 annehmen, aber 100%ig auszuschließen ist es eben doch nicht. Diese Variable ist dann im weiteren Verlauf des Programmes oft der Nenner für die Berechnung eines weiteren Wertes.
Ein rechtzeitiges Abfangen ist hier deswegen nur sehr unwahrscheinlich möglich. :wink:

Danke für eure Beiräge und weiterhin viel Spass

Thomas

Beitrag von ewx (Top Expert / 4842 / 310 / 638 ) »
Anonymous hat geschrieben:Ein rechtzeitiges Abfangen ist hier deswegen nur sehr unwahrscheinlich möglich. :wink:
Ist

Code: Alles auswählen.

IF x = 0.
  MESSAGE I123(ABC) "Division durch null nicht erlaubt!"
ELSE.
  DIVIDE y BY x.
ENDIF.
nicht rechtzeitig und unwahrscheinlich:?:
wundert sich Enno

Seite 1 von 1

Vergleichbare Themen

9
Antw.
5109
Views
Rundungsfehler bei Division
von schusterd » 10.08.2016 11:12 • Verfasst in ABAP® für Anfänger
1
Antw.
4244
Views
EXCEPTION: Division by zero Fragen
von PaddyG » 16.02.2005 12:29 • Verfasst in ABAP® Core
5
Antw.
2945
Views
Unerwartetes Ergebnis bei Division
von Barney » 05.01.2016 14:23 • Verfasst in ABAP® für Anfänger
1
Antw.
2126
Views
Division in Query mittels lokalem Feld
von peterlustig007 » 05.04.2007 09:06 • Verfasst in Sonstige Module
2
Antw.
1541
Views
Loginscreen bei RFC vermeiden
von Janosch2 » 14.12.2004 11:14 • Verfasst in ABAP® Core

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1580
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8189