ABAP Keyword Documentation → ABAP − Reference → Processing Internal Data → Numeric Calculations → arith_exp - Arithmetic Expressions → arith_exp - Arithmetic Operators
Floating Point Numbers, Arithmetic Calculations
The example demonstrates arithmetic calculations with floating point numbers.
Other versions: 7.31 | 7.40 | 7.54
Source Code
<span class="blue">* Calculate decfloat34</span>
TRY.
CASE operator.
WHEN ' '.
df34_r = EXACT #( + df34_1 ).
WHEN '+'.
df34_r = EXACT #( df34_1 + df34_2 ).
WHEN '-'.
df34_r = EXACT #( df34_1 - df34_2 ).
WHEN '*'.
df34_r = EXACT #( df34_1 * df34_2 ).
WHEN '/'.
df34_r = EXACT #( df34_1 / df34_2 ).
WHEN '**'.
df34_r = df34_1 ** df34_2.
CLEAR exct_34.
ENDCASE.
CATCH cx_sy_conversion_overflow.
res_df34 = text-ove.
CLEAR exct_34.
CATCH cx_sy_arithmetic_overflow.
res_df34 = text-ove.
CLEAR exct_34.
CATCH cx_sy_conversion_rounding INTO DATA(exrnd).
df34_r = exrnd->value.
exct_34 = text-noe.
ENDTRY.
IF res_df34 = ' '.
res_df34 = |{ df34_r ALIGN = LEFT STYLE = SCALE_PRESERVING }|.
continue_flag = 'X'.
ENDIF.
<span class="blue">* Calculate decfloat16</span>
TRY.
CASE operator.
WHEN ' '.
df16_r = EXACT #( df34_1 ).
WHEN '+'.
df16_r = EXACT #( df34_1 + df34_2 ).
WHEN '-'.
df16_r = EXACT #( df34_1 - df34_2 ).
WHEN '*'.
df16_r = EXACT #( df34_1 * df34_2 ).
WHEN '/'.
df16_r = EXACT #( df34_1 / df34_2 ).
WHEN '**'.
df16_r = df34_1 ** df34_2.
CLEAR exct_16.
ENDCASE.
CATCH cx_sy_conversion_overflow.
res_df16 = text-ove.
CLEAR exct_16.
CATCH cx_sy_arithmetic_overflow.
res_df16 = text-ove.
CLEAR exct_16.
CATCH cx_sy_conversion_rounding INTO exrnd.
df16_r = exrnd->value.
exct_16 = text-noe.
ENDTRY.
IF res_df16 = ' '.
res_df16 = |{ df16_r ALIGN = LEFT STYLE = SCALE_PRESERVING }|.
ENDIF.
<span class="blue">* Calculate type f</span>
TRY.
f1 = df34_1.
f2 = df34_2.
CASE operator.
WHEN ' '.
f_r = f1.
WHEN '+'.
f_r = f1 + f2.
WHEN '-'.
f_r = f1 - f2.
WHEN '*'.
f_r = f1 * f2.
WHEN '/'.
f_r = f1 / f2.
WHEN '**'.
f_r = f1 ** f2.
ENDCASE.
CATCH cx_sy_conversion_overflow.
res_f = text-ove.
CATCH cx_sy_arithmetic_overflow.
res_f = text-ove.
ENDTRY.
IF res_f = ' '.
res_f = |{ f_r ALIGN = LEFT }|.
ENDIF.
Description
Two operands and various arithmetic operators can be entered. The calculation is performed for the data
types decfloat34, decfloat16, and f. For decimal floating point numbers, the losslessness of the calculation is checked using the
lossless operator EXACT.