本文主要对SAP ABAP中预定义数据类型进行一个详细地介绍,在此前文章中我们已经对预定义数据类型有了一个最基本的了解,本文在此基础上会进行更加详细深入细致地讲解,主要包括预定义数据类型的分类
预定义数据类型
预定义的数据类型包括两种,一种是在系统中已经预定义好的基本数据类型,在T-CODE:SE38 ABAP编辑器中定义数据对象时可以直接使用的,其中大致有如下最常用的8种:
数据类型 | 默认长度 | 有效长度 | 默认值 | 解释说明 |
I | 4 | 4 | 0 | 整型 |
F | 8 | 8 | 0 | 浮点型 |
P | 8 | 1~16 | 0 | 压缩数类型(将两个十进制数字压缩到一个字节) |
C | 1 | 1~65535 | '...' | 文本型 |
D | 8 | 8 | '00000000' | 日期型(YYYYMMDD) |
N | 1 | 1~65535 | '0...0' | 数字字符串类型(0~9之间的字符组成的数字字符串) |
T | 6 | 6 | '000000' | 时间类型(格式:HHMMSS) |
x | 1 | 1~65535 | X'0......0' | 十六进制字段 |
STRING | 0 | ANY | SPACE | 字符串类型 |
此外在T-CODE:SE11中定义数据元素时还有31种ABAP字典数据类型,它们是用于专门维护数据元素所使用的,列举如下:
数据类型 | 简短描述 |
ACCP | 过账期间YYYYMM |
CHAR | 字符串 |
CLNT | 集团 |
CUKY | 货币字段的货币码 |
CURR | 采用BCD格式的货币字段 |
DF16_DEC | 以BCD格式保存的十进制浮点数 |
DF16_RAW | 以二进制数字形式保存的十进制浮点数 |
DF16_SCL | 具有比例的十进制浮点数(已弃用) |
DF34_DEC | 以BCD格式保存的十进制浮点数 |
DF34_RAW | 以二进制数字形式保存的十进制浮点数 |
DF34_SCL | 具有比例的十进制浮点数(已弃用) |
DATS | 使用格式YYYYMMDD的日期 |
DEC | 采用BCD格式的压缩数字 |
FLTP | 浮点数 |
INT1 | 1字节整数,0到255 |
INT2 | 2字节整数,-32768到32767 |
INT4 | 4字节整数,-2147483648到2147483467 |
INT8 | 8字节整数 |
LANG | 语言代码 |
LCHR | 长字节串 |
LRAW | 长字节字符串 |
NUMC | 数字文本 |
PREC | 过时数据类型 |
QUAN | 采用BCD格式的数量字段 |
RAW | 字节序列 |
RAWSTRING | 字节字符串(BLOB) |
SSTRING | 字符串 |
STRING | 字符串(CLOB) |
TIMS | 格式为HHMMSS的时间 |
UNIT | 数量字段的单元码 |
VARC | 过时数据类型 |
预定义数据类型分类
数字型
(一) 整数型I
(1)值的范围是-2^31(-2147483648)~2^31(-2147483647)
DATA: gv_i type i VALUE -2147483649."默认值超出整型范围系统会报错
(2)只支持整数类型
(3)非整数类型的数据会进行四舍五入的计算
DATA: gv_i TYPE i VALUE '2.5'. WRITE:gv_i.
(二) 小数型P
(1)允许有小数位
DATA: gv_p TYPE p VALUE '2.5' DECIMALS 2. WRITE:gv_p.
(2)若不使用DECIMALS关键字指定小数位则与类型I效果一致
DATA: gv_p TYPE p VALUE '2.5' . WRITE:gv_p.
(3)可用长度为1~16,小数位最大长度为14位
DATA: gv_p TYPE p VALUE '2.5' DECIMALS 15."小数位超过14位系统会报错 WRITE:gv_p.
(三) 浮点型F
(1)F类型的显示值的方式为科学计数法
DATA: gv_f TYPE f VALUE '25000'. WRITE:gv_f.
上述图片中的值在数学中则是:2.5000000000000000×10^(+4)
说明:使用下面表格解释上述显示值各部分的含义
尾数 | 精度值 | 指数符号 | 正负符号 | 指数大小 | |
2.5 | 后面的0 | E | + | 04 |
(2)值的范围是10^-307~10^308
(3)F类型转换成二进制时会发生进位误差
(4)F类型不能显示高精度数据
DATA: gv_p TYPE f VALUE '2.5635635'."从结果可以看出f类型在输出高精度数据时会无限趋近但不能等于该值 WRITE:gv_p.