COMPUTE [EXACT] lhs =|?= rhs.
COMPUTE can be written before every
assignment with an
?=, except when an
inline declaration or a
is made on the left side. The keyword
COMPUTE is ignored by the assignment unless the addition
EXACT is specified.
If the addition
EXACT is specified, the statement works as follows:
lhs = EXACT #( rhs ).
In this case,
COMPUTE performs a
lossless calculation in accordance with the same rules as apply when using the
arithmetic expression. Only the
simplified arithmetic expressions described
here can be specified for
lhs cannot have the type
f. If a rounding raises an exception, the target variable is not modified.
COMPUTE is a relic and was originally designed for arithmetic calculations where the right side is an arithmetic expression:
COMPUTE [EXACT] result = arith_exp.
Strictly speaking, the statement applies only in this case; more loosely, it applies even if a string expression or bit expression is specified as a different form of calculation expression on the right side.
Alongside the introduction using a calculation expression on the right side, the following variants also exist:
COMPUTE destination = dobj.
dobjis specified on the right side,
COMPUTEworks like an assignment of data objects.
COMPUTE destination_ref =|?= source_ref.
COMPUTEworks like an up cast or down cast.
COMPUTE destination = meth( ) | func( ) | constr_expr
COMPUTEworks like an assignment of return values.
COMPUTE destination1 = destination2 = ... = destination = rhs.
COMPUTEworks like a multiple assignment.
This means that the keyword
COMPUTE does not produce a calculation. More specifically,
COMPUTE does not modify the way a
calculation type is chosen:
- When a data object is assigned to a target object, the type of the source object is always converted to the type of the target object, even if prefixed with
- When an arithmetic
expression is assigned, the calculation type is always determined from all operands involved, including the left side, even if not prefixed with
For this reason, it is not advisable to specify the keyword
assignments. If the right side is not a calculation expression, the keyword produces false information. If the right side is a calculation expression, the keyword is ignored if specified.
COMPUTE is used for assignments to
EXACT and the lossless operator
EXACT have the special effect that they can enable assignments, which otherwise would not have been possible.
It is not possible to have the two commented out assignments of a calculation to the
num. The assignment is possible using
EXACT, because in this case the assignment follows the same
rules as the lossless operator displayed underneath.
TYPES: BEGIN OF ENUM number, n0, n1, n2, END OF ENUM number. DATA num TYPE number. "num = + 1. COMPUTE EXACT num = + 1. num = EXACT number( + 1 ).