Решил проверить как работают операции целочисленного деления и остаток от целочисленного деления. Для этого написал небольшую программу:
REPORT z_test_integer_division.
CLASS lcl_controller DEFINITION ABSTRACT FINAL.
PUBLIC SECTION.
CLASS-METHODS:
main.
ENDCLASS.
CLASS lcl_controller IMPLEMENTATION.
METHOD main.
" Test integer division and remainder of integer division operators.
DATA:
a TYPE i,
b TYPE i,
c TYPE i.
a = 9.
b = 7.
c = a DIV b.
WRITE: / 'Result of ', a, ' DIV ', b, ' = ', c.
a = -9.
b = 7.
c = a DIV b.
WRITE: / 'Result of ', a, ' DIV ', b, ' = ', c.
a = 9.
b = -7.
c = a DIV b.
WRITE: / 'Result of ', a, ' DIV ', b, ' = ', c.
a = -9.
b = -7.
c = a DIV b.
WRITE: / 'Result of ', a, ' DIV ', b, ' = ', c.
a = 9.
b = 7.
c = a MOD b.
WRITE: / 'Result of ', a, ' MOD ', b, ' = ', c.
a = -9.
b = 7.
c = a MOD b.
WRITE: / 'Result of ', a, ' MOD ', b, ' = ', c.
a = 9.
b = -7.
c = a MOD b.
WRITE: / 'Result of ', a, ' MOD ', b, ' = ', c.
a = -9.
b = -7.
c = a MOD b.
WRITE: / 'Result of ', a, ' MOD ', b, ' = ', c.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
lcl_controller=>main( ).
Результат выполнения кода следующий:
Result of 9 DIV 7 = 1
Result of 9- DIV 7 = 2
Result of 9 DIV 7- = 1
Result of 9- DIV 7- = 2
Result of 9 MOD 7 = 2
Result of 9- MOD 7 = 5
Result of 9 MOD 7- = 2
Result of 9- MOD 7- = 5
Вывод по результата выполнения программы.
Используется метод отбрасывания дробной части с приближением к наименьшему целому. Знак ближайшего целого определяется по знаку первого операнда. Например, при отрицательном -9 результат деления будет -2, а не -1, т. к. в вещественных числах результат больше -1, а наименьшее целое как раз и будет -2.
REPORT z_test_integer_division.
CLASS lcl_controller DEFINITION ABSTRACT FINAL.
PUBLIC SECTION.
CLASS-METHODS:
main.
ENDCLASS.
CLASS lcl_controller IMPLEMENTATION.
METHOD main.
" Test integer division and remainder of integer division operators.
DATA:
a TYPE i,
b TYPE i,
c TYPE i.
a = 9.
b = 7.
c = a DIV b.
WRITE: / 'Result of ', a, ' DIV ', b, ' = ', c.
a = -9.
b = 7.
c = a DIV b.
WRITE: / 'Result of ', a, ' DIV ', b, ' = ', c.
a = 9.
b = -7.
c = a DIV b.
WRITE: / 'Result of ', a, ' DIV ', b, ' = ', c.
a = -9.
b = -7.
c = a DIV b.
WRITE: / 'Result of ', a, ' DIV ', b, ' = ', c.
a = 9.
b = 7.
c = a MOD b.
WRITE: / 'Result of ', a, ' MOD ', b, ' = ', c.
a = -9.
b = 7.
c = a MOD b.
WRITE: / 'Result of ', a, ' MOD ', b, ' = ', c.
a = 9.
b = -7.
c = a MOD b.
WRITE: / 'Result of ', a, ' MOD ', b, ' = ', c.
a = -9.
b = -7.
c = a MOD b.
WRITE: / 'Result of ', a, ' MOD ', b, ' = ', c.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
lcl_controller=>main( ).
Результат выполнения кода следующий:
Result of 9 DIV 7 = 1
Result of 9- DIV 7 = 2
Result of 9 DIV 7- = 1
Result of 9- DIV 7- = 2
Result of 9 MOD 7 = 2
Result of 9- MOD 7 = 5
Result of 9 MOD 7- = 2
Result of 9- MOD 7- = 5
Вывод по результата выполнения программы.
Используется метод отбрасывания дробной части с приближением к наименьшему целому. Знак ближайшего целого определяется по знаку первого операнда. Например, при отрицательном -9 результат деления будет -2, а не -1, т. к. в вещественных числах результат больше -1, а наименьшее целое как раз и будет -2.