ROUNDED and ON SIZE ERROR
Problem Description
Handle decimal precision with ROUNDED and overflow with ON SIZE ERROR.
Expected Output
Proper handling of rounding and overflow
Hints
ROUNDED rounds result, ON SIZE ERROR handles overflow.
Solution
IDENTIFICATION DIVISION.
PROGRAM-ID. RNDSIZE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC 9(3)V99 VALUE 100.00.
01 WS-NUM2 PIC 9(1)V99 VALUE 3.00.
01 WS-RESULT PIC 9(3)V99.
01 WS-SMALL PIC 9(2).
01 WS-BIG PIC 9(5) VALUE 99999.
01 WS-ERROR-FLG PIC 9 VALUE 0.
PROCEDURE DIVISION.
* Without ROUNDED - truncates
DIVIDE WS-NUM1 BY WS-NUM2 GIVING WS-RESULT.
DISPLAY "WITHOUT ROUNDED: " WS-RESULT.
* With ROUNDED - rounds to nearest
DIVIDE WS-NUM1 BY WS-NUM2 GIVING WS-RESULT ROUNDED.
DISPLAY "WITH ROUNDED: " WS-RESULT.
* ON SIZE ERROR - handles overflow
MOVE 0 TO WS-ERROR-FLG.
ADD 1 TO WS-BIG
ON SIZE ERROR
MOVE 1 TO WS-ERROR-FLG
DISPLAY "OVERFLOW DETECTED!"
NOT ON SIZE ERROR
DISPLAY "RESULT: " WS-BIG
END-ADD.
* Attempting overflow
MOVE 99 TO WS-SMALL.
ADD 5 TO WS-SMALL
ON SIZE ERROR
DISPLAY "SIZE ERROR: RESULT > 99"
NOT ON SIZE ERROR
DISPLAY "SMALL = " WS-SMALL
END-ADD.
STOP RUN.
Explanation:
ROUNDED prevents truncation. ON SIZE ERROR catches overflow/underflow.