- •Тема 9 Операторы присваивания, преобразования и вычисления
- •1. Работа с системными переменными
- •Обычно используемые системные переменные
- •2. Операторы присваивания
- •Использование оператора move
- •Правильное и неправильное использование присваивания
- •Преобразования Данных
- •Использование move c Field Strings
- •3. Выполнение вычислений
3. Выполнение вычислений
Для выполнения вычислений используются следующие операторы:
compute
add or add-corresponding
subtract or subtract-corresponding
multiply or multiply-corresponding
divide or divide-corresponding
Оператор compute.
Операторы и операнды должны быть отделены пробелами. В операторе может быть более одного операнда.
Синтаксис оператора:
compute v3 = v1 op v2 [op vn ...].
или
v3 = v2 op v2 [op vn ...].
v3 – переменная получения для результата вычисления.
v1, v2, и vn являются операндами.
op – математический оператор.
Список правильных операторов:
Операторы |
Операция |
+ |
Сложение |
- |
Вычитание |
* |
Умножение |
/ |
Деление |
** |
Возведение в степень |
DIV |
Целочисленное деление |
MOD |
Остаток от целочисленного деления |
Математические выражения могут содержать любое число круглых скобок. Каждой скобке должен предшествовать по крайней мере один пробел. Однако, есть одно исключение этому правилу. После встроенного имени функции не может быть пробела; круглая скобка открытия должна следовать за именем функции.
Правильно |
Неправильно |
f1 = f2 + f3. |
f1 = f2+f3. |
f1 = ( f2 + f3 ) * f4. |
f1 = (f2 + f3) * f4. |
f1 = sqrt( f2 ). |
f1 = sqrt ( f2 ). |
|
f1 = sqrt(f2). |
При работе с вещественными числами должна быть включена опция проверки десятичных вычислений. Если она отключена, то вычисление 1 / 3 * 3 даст результат нуль, потому что промежуточный результат 0.333333 округлен, и обнуляется прежде, чем будет умножен на 3. Если опция включена, результат 1.
Операторы add и add-corresponding
Оператор add используется для добавления одного числа к другому. Field Strings с компонентами, имеющими одинаковые поля, могут быть сложены с помощью add-corresponding.
Синтаксис оператора add. Преобразования выполняются по мере необходимости таким же образом, как и в операторе compute.
add v1 to v2.
v2 – переменная, добавляемая к v1.
v1 – переменная, добавленная к v2.
Синтаксис для subtract, multiply, and divide аналогичен.
Синтаксис оператора add-corresponding.
add-corresponding s1 to s2.
s2 – Field String, добавляемая к s1.
s1 – Field String, добавленная к s2.
Оператор add был сгенерирован для каждой пары компонентов, имеющих одинаковое название в s1 и s2.
Subtract-corresponding, multiply-corresponding и divide-corresponding работает аналогичным образом.
report ztx0913.
data: f1 type i value 2,
f2 type i value 3,
begin of s1,
c1 type i value 10,
c2 type i value 20,
c3 type i value 30,
end of s1,
begin of s2,
c1 type i value 100,
x2 type i value 200,
c3 type i value 300,
end of s2.
add f1 to f2. write / f2. "f1 is unchanged
subtract f1 from f2. write / f2.
multiply f2 by f1. write / f2.
divide f2 by f1. write / f2.
add-corresponding s1 to s2.
write: / s2-c1, s2-x2, s2-c3.
subtract-corresponding s1 from s2.
write: / s2-c1, s2-x2, s2-c3.
multiply-corresponding s2 by s1.
write: / s2-c1, s2-x2, s2-c3.
divide-corresponding s2 by s1.
write: / s2-c1, s2-x2, s2-c3.
5
3
6
3
110 200 330
100 200 300
1,000 200 9,000
100 200 300
Использование даты в вычислениях
Переменная даты (тип d) может использоваться в математических выражениях.
report ztx0914.
type-pools ztx1. "contains ztx1_amalgamation_date
data: d1 like sy-datum,
d2 like d1,
num_days type p.
d1 = d2 = sy-datum.
subtract 1 from d1. write / d1. "yesterday's date
d2+6 = '01'. write / d2. "first day of current month
subtract 1 from d2. write / d2. "last day of previous month
num_days = sy-datum - ztx1_amalgamation_date.
write / num_days. "number of days since amalgamation
Пусть текущая дата 22 февраля 1998.
1998/02/21
1998/02/01
1998/01/31
354