ARTICLE
Predefined Numeric Types
The data objects of the numeric data types are used to handle number
values.
Properties
Type Length Standard Length Name
b 1 byte 1-byte integer
(internal)
s 2 byte 2-byte integer
(internal)
i 4 byte 4-byte integer
int8 8 Byte 8-Byte- Integer
p 1 to 16 bytes8 byte Packed
number
decfloat16 8 byte Decimal floating
point number with 16 decimal places
decfloat34 16 byte Decimal floating
point number with 34 decimal places
f 8 byte Binary floating point
number with 17 decimal places
Value Ranges and Initial Values
Type Value Range Initial Value
b 0 to 2550
s -32,768 to +32,7670
i -2,147,483,648 to +2,147,483,6470
int8 -9.223.372.036.854.775.808 bis +9.223.372.036.854.775.807
0
p The valid length for packed numbers is between 1 and 16 bytes;
two decimal places are packed into one byte, whereby the last byte only
contains one place and the plus/minus sign; after the decimal separator,
up to 14 decimal places are
permitted. Depending on the field length len and the number of
decimal places dec, the following applies for the value range: (-10^(2
len -1) +1) / (10^(+dec)) to (+10^(2 len -1) -1)
/(10^(+dec)) in steps of 10^(-dec). Values in between this range are
rounded; invalid contents result in undefined behavior.0
decfloat16 Decimal floating point numbers of this type are
represented internally with 16 decimal places in accordance with the
IEEE-754-2008 standard; valid values are numbers between
1E385(1E-16 - 1) and -1E-383 for the negative range, 0 and +1E-383 to
1E385(1 - 1E-16) for the positive range. Values lying between the ranges
form the subnormal range and are rounded; outside of the subnormal
range, each 16-digit decimal number can be represented precisely with
such a decimal floating point number0
decfloat34 Decimal floating point numbers of this type are
represented internally with 34 decimal places in accordance with the
IEEE-754-2008 standard; valid values are numbers between
1E6145(1E-34 - 1) and -1E-6143 for the negative range, 0 and +1E-6143
and 1E6145(1 - 1E-34) for the positive range. Values lying between the
ranges form the subnormal range and are rounded; outside of the
subnormal range, each 34-digit decimal number can be represented
precisely with such a decimal floating point number0
f Binary floating point numbers are represented internally in
accordance with the IEEE-754 standard ( double precision );
in ABAP, 17 decimal places are represented (one place before the decimal
point and 16 places in the fractional part). Valid values are numbers
between -1.7976931348623157E+308 and -2.2250738585072014E-308 for the
negative range and between +2.2250738585072014E-308 and
+1.7976931348623157E+308 for the positive range, plus 0. Both validity
intervals are extended in the direction of zero using subnormal numbers
in accordance with the IEEE-754 standard. 0
ABAP_PGL Selecting the Numeric
Type
Notes
The numeric data types are used for numeric
calculations . Here, the data type f for binary floating point
numbers is replaced largely by the types decfloat16 and
decfloat34 for decimal floating point numbers.
The types b and s are internal types and cannot be
specified either statically or dynamically in ABAP statements.
Self-defined data types and data objects in ABAP programs have the data
types b or s if they have been defined with reference to
data elements of the ABAP Dictionary that have the
external data types INT1 or
INT2 .
The type p , for which a length interval is specified in the
second column in the first table, is
generic , which means that the length is not part of the type
description. Also, the fractional
portion is undefined as well as the length. The entry in the Standard
Length column specifies the length used in declarations of data objects
when using types with generic lengths, if no explicit length is
specified in the relevant statement.
The system class CL_ABAP_MATH
contains constants for the minimum and maximum values of most numeric
types.
Since the decimal places of a floating point number of type f are
represented internally as dual fractions, there is not an exact
equivalent for every number that can be represented in the decimal
system. This can lead to rounding errors in conversions and intermediate
results of calculations. These errors can be avoided by using a two-step
rounding procedure.
For data objects of data type p , the
program attribute Fixed Point
Arithmetic must be set so that the decimal separator is taken into
account. Otherwise, in all operations, the content is handled as if
there is no decimal separator. The sequence of digits in the variables
of type p is interpreted as a whole number. Exceptions are:
Representation on screens
Formatting with WRITE [TO]
Assignments to character-like objects with
the types c and string
For decimal floating point numbers, the ABAP runtime environment uses
runtime modules of decNumber (c) Copyright IBM Corporation 2001, 2004.
All rights reserved.
See also Numeric Data Types .
Example
According to the formula in the table, the value range of a packed
number with length 2 and two decimal places is (-10^(2x2 -1) +1) /
(10^2) to (+10^(2x2 -1) -1) / (10^2) and therefore =-9.99 to +9.99 in
steps of 0.01. A value within this range, for example 1.428, is rounded
up to 1.43.
DATA: pack TYPE p LENGTH 2 DECIMALS 2,
result TYPE REF TO data.
FIELD-SYMBOLS <(><<)>result> TYPE ANY.
result = cl_abap_exceptional_values=>get_min_value( pack ).
IF result IS NOT INITIAL.
ASSIGN result->* TO <(><<)>result>.
cl_demo_output=>write_data( <(><<)>result> ).
ENDIF.
result = cl_abap_exceptional_values=>get_max_value( pack ).
IF result IS NOT INITIAL.
ASSIGN result->* TO <(><<)>result>.
cl_demo_output=>write_data( <(><<)>result> ).
ENDIF.
cl_demo_output=>display( ).
Documentation extract taken from SAP system, � Copyright SAP AG. All rights reserved