DIVIDE Statement
- The DIVIDE statement divides one number by another.
- It's similar to mathematics, where we have a dividend (the number being divided) and a divisor (the number we're dividing by).
- It sets the output values quotient (GIVING phrase) and the remainder (REMAINDER phrase) to the corresponding variables.
DIVIDE statement has below different formats based on phrases -
- Simple DIVIDE statement.
- DIVIDE with INTO|BY and GIVING.
- DIVIDE with ON SIZE ERROR (Error Handling).
- DIVIDE with INTO|BY, GIVING and REMAINDER.
Simple DIVIDE statement -
In the below format, the value of variable1 is divided by the value of variable2, and the quotient (result) is stored in variable2.
Syntax -
DIVIDE ws-variable1
INTO ws-variable2 [ROUNDED]
[END-DIVIDE].
Parameters -
- ws-variable1 - Refers to the dividend (the number being divided). From example, it is WS-VAR1.
- ws-variable2 - Refers to the divisor (the number we're dividing by). It is the output variable after the operation performed. From example, it is WS-VAR2.
- ROUNDED Phrase - Used to round the fraction result to the nearest integer value based on the faction value.
- END-DIVIDE - Specifies the scope terminator for the DIVIDE statement and is optional when the period is coded at the end of the DIVIDE statement.
Example -
Scenario - Divide one variable with other.
...
WORKING-STORAGE SECTION.
01 WS-VAR.
05 WS-VAR1 PIC 9(03) VALUE 50.
05 WS-VAR2 PIC 9(03) VALUE 5.
...
PROCEDURE DIVISION.
DIVIDE WS-VAR1 INTO WS-VAR2
DISPLAY "Result: " WS-VAR2.
Output -
Result: 10
DIVIDE with INTO|BY and GIVING -
In the below format, the value of variable1 is divided by the value of variable2, and the quotient (result) is stored in variable3.
Syntax -
DIVIDE ws-variable1
INTO ws-variable2
GIVING ws-result
[END-DIVIDE].
Example -
Scenario - Divide one variable with other and result into another variable.
...
WORKING-STORAGE SECTION.
01 WS-VAR.
05 WS-VAR1 PIC 9(03) VALUE 50.
05 WS-VAR2 PIC 9(03) VALUE 5.
05 WS-RESULT PIC 9(03).
...
PROCEDURE DIVISION.
DIVIDE WS-VAR1 INTO WS-VAR2
GIVING WS-RESULT
DISPLAY "Result: " WS-RESULT.
Output -
Result: 10
DIVIDE with ON SIZE ERROR (Error handling) -
ON SIZE ERROR is used to handle the program flow when the result value exceeds the maximum value that a result variable can hold. NOT ON SIZE ERROR phrase handles the program flow when the result value is within the range.
Syntax -
DIVIDE ws-variable1
INTO ws-variable2 [ROUNDED]
GIVING ws-result
[ON SIZE ERROR statements-block1]
[NOT ON SIZE ERROR statements-block2]
[END-DIVIDE].
Parameters -
- ON SIZE ERROR statements-set1 - statements-set1 executes when size error occured. From example, it is DISPLAY "OVERFLOW".
- NOT ON SIZE ERROR statements-set2 - statements-set2 executes when no error occured. From example, it is DISPLAY "NOT OVERFLOW".
Example -
Scenario - Divide with error handling.
...
WORKING-STORAGE SECTION.
01 WS-VAR.
05 WS-VAR1 PIC 9(03) VALUE 500.
05 WS-VAR2 PIC 9(03) VALUE 5.
05 WS-VAR3 PIC 9(02).
...
PROCEDURE DIVISION.
DIVIDE WS-VAR1
INTO WS-VAR2
GIVING WS-VAR3
ON SIZE ERROR DISPLAY "OVERFLOW"
NOT ON SIZE ERROR DISPLAY "Result: " WS-VAR3.
Output -
OVERFLOW
DIVIDE with INTO|BY, GIVING and REMAINDER -
In the below format, the value of variable1 is divided by the value of variable2, the result is stored in variable3 coded with the GIVING phrase, and the remainder is stored in variable4 coded with the REMAINDER phrase.
Syntax -
DIVIDE ws-variable1
INTO ws-variable2
GIVING ws-result [ROUNDED]
[REMAINDER ws-remainder]
[ON SIZE ERROR statements-block1]
[NOT ON SIZE ERROR statements-block2]
[END-DIVIDE].
Parameters -
- REMAINDER ws-remainder - Used to store store the remainder value.
Example -
Scenario - Divide one variable with other, result and remainder into separate variables.
...
WORKING-STORAGE SECTION.
01 WS-VAR.
05 WS-VAR1 PIC 9(03) VALUE 32.
05 WS-VAR2 PIC 9(03) VALUE 5.
05 WS-VAR3 PIC 9(03) VALUE 0.
05 WS-VAR4 PIC 9(03) VALUE 0.
...
PROCEDURE DIVISION.
DIVIDE WS-VAR1 INTO WS-VAR2
GIVING WS-VAR3
REMAINDER WS-VAR4
DISPLAY "Result: " WS-VAR3.
DISPLAY "Remainder: " WS-VAR4.
Output -
Result: 6 Remainder: 2