Code: Alles auswählen.
IF x = 0.
x = '0.00000001'.
ENDIF.
* Hier folgt die normale Berechnung
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.
Full Ack.Anonymous hat geschrieben:Falls 'X' eine User-Eingabe sein soll, muss programmtechnisch dafür gesorgt werden, dass der User etwas eingibt/eingeben muss.
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...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.
Code: Alles auswählen.
CATCH SYSTEM-EXCEPTIONS
arithmetic_errors = 1
conversion_errors = 2.
IstAnonymous hat geschrieben:Ein rechtzeitiges Abfangen ist hier deswegen nur sehr unwahrscheinlich möglich.
Code: Alles auswählen.
IF x = 0.
MESSAGE I123(ABC) "Division durch null nicht erlaubt!"
ELSE.
DIVIDE y BY x.
ENDIF.