1. 程式人生 > >ABAP基礎:數據類型

ABAP基礎:數據類型

日期 分享圖片 abap hour padding 字段長度 lac bit 變量

數據類型-Data Type:定義程序中可以使用的數據類型,使用前要先定義

數據變量-Data Variable:參照數據類型定義的、可以存儲值的變量,就是變量嘛

數據類型

  • 數據類型在ABAP程序中用於定義變量類型
  • 數據類型和數據對象是單獨聲明的,數據對象則參照數據類型定義
  • 在程序中利用TYPES語句聲明數據類型,只能在該程序中使用,也成為本地數據類型
  • 本地數據類型可以參照ABAP數據類型進行聲明

數據變量

  • 數據變量是在程序中參照數據類型定義的值。
  • 常用方法是用Data語句定義變量

註意:變量實際指數據對象,數據對象在程序執行期間占用內存空間

三種數據類型

1.ABAP基本數據類型

  • 系統內部定義的數據類型 https://www.cnblogs.com/zhaorp/p/6925301.html
  • 類型

    允許最大長度(字符數)

    默認長度(省略時采用)

    說明

    初始值

    C

    1~262143個字符

    1 字符

    如果未在 DATA 語句中指定參數<length>和<type>,則創建長度為 1 的字符

    每個位置都是空格

    N

    1~262143個字符

    1 字符

    0到9之間字符組成的數字字符串

    如果未在 DATA 語句中指定參數<length>,則創建長度為 1

    "0"每個位置都是阿拉伯數字0

    D

    8 個字符

    日期格式必須為 YYYYMMDD 取值範圍:YYYY (year): 0001 to 9999, MM(month): 01 to 12, DD (day): 01 to 31

    "00000000"

    T

    6 個字符

    格式為 24-hour的 HHMMSS

    HH:00 to 23

    MM: 00 to 59

    SS: 00 to 59

    "000000"

    I

    4 bytes

    -2.147.483.648 to +2.147.483.647(.點號為千分位分隔符,不是小數點,而,逗號則表示是小數點)

    如果運算出現非整型的結果(如小數)則進行四舍五入,而不是截斷

    0

    F

    8 bytes

    小數位最大可以到17位,即可精確到小數點後17位

    取值範圍:-1,7976931348623157EE+308 to -2,2250738585072014EE-308 for the negative area, the value zero, and +2,2250738585072014EE-308 to +1,7976931348623157EE+308 for the positive area.

    如果要求高精度,則不應該使用類型 F 數據。而應代之以類型 P 數據

    F賦值時,會轉換為標準形式:<±尾數部分>E±<指數部分>,且尾數部分的小數位最多為17位

    0

    如果值是小數,則要將值使用引號引起來

    P

    1 to 16 bytes

    8 bytes

    有效長度為1到16個字節。

    兩個數字位壓縮後才占一個字節,由於0-9的數字只需要4Bit位,所以一個字節實質上允許存儲二位數字,這就是P數據類型為壓縮數據類型的由來,因為定義的的數據長度比存儲於內存中要長。並借用最後半個字節,即字面上的一位來存儲小數點、正號、負號、或者是這三種中間的組合————存儲的可能是通過將小數點與正負號經過某種位運算後的結果,因為半個字節不可能存儲小數或正負號的所對應的ASCII碼(都比15大)

    P類型最多允許14位小數位,即可以精確到小數點後14,再除開小數點與正負號占半個字節,即字面上1位4Bit,此時最大整數位最長可達16*2 = 32 – 1 = 31 -14 = 17位

    Depending on the field length len(len表示定義時P的整個長度) and the number of decimal places dec(dec表示小數位), the following applies for the value area: (-10^(2len -1) +1) / (10^(+dec)) to (+10^(2len -1) -1) /(10^(+dec)) in steps of 10^(-dec). Values in between this range are rounded off.

    在計算過程中如果小數部分過長,則進行四舍五入

    0

    若小數部分超過長度,則自動按四舍五入將多余的小數除掉;如果整數部分超過長度,則系統運行出錯

    如果值是小數,則要將值使用引號引起來

    X

    1~524,287 bytes

    1 byte

    十六進制字符 0-9, A-F具體的範圍為:00~FF

    類型X是十六進制類型,可表示內存字節實際內容,使用兩個十六制字符表示一個字節中所存儲的內容。但直接打印輸出時,輸出的還是賦值時字面意義上的值,而不是Unicode解碼後的字符

    如果未在 DATA 語句中指定參數<length>,則創建長度為 1

    註:如果值是字母,則一定要大寫,否則賦值不進

    DATA: x2(2) TYPE x.
    x2 = ‘3AA‘.
    WRITE : / x2."輸出賦值時字面上的值:3AA0

    十六進制的00

    string

    不限定

    在系統內部,長度可變的內置類型(String、XString)是通過引用實際動態的數據對象的固定內存地址來進行操作,因而這兩種內置類型和引用類型一樣,屬於縱深類型。

    長度為0的空字符串‘‘

    xstring

    不限定

    由十六進制字符 0-9, A-F組成字符串。直接打印輸出時,輸出的還是賦值時字面意義上的值,而不是Unicode解碼後的字符串

    註:如果值是字母,則一定要大寫,否則賦值不進

    DATA : xs TYPE xstring .
    xs = ‘303132‘."表示字符串 012
    WRITE :/ xs."但輸出的還是303132

    長度為0的空字符串‘‘

    b

    1 Byte

    0 to 255屬於ABAP內部類型,在ABAP程序中不能直接使用

    0

    s

    2 bytes

    -32.768 to +32.767屬於ABAP內部類型,在ABAP程序中不能直接使用

    0

2.局部數據類型-存在於程序內部

3.全局數據類型-存在於數據字典中

  • 全局數據類型是指所有程序都可以使用的數據類型
  • 可以用TYPE語句參照ABAP數據字典裏的數據類型定義變量

聲明數據類型

1.參考基本數據類型定義變量

DATA:gv_num TYPE i,
   gv_deci TYPE f. 

TYPE後面是ABAP基本數據類型

2.參照局部數據類型定義變量

將程序中常用的數據及結構聲明為一個數據類型,定義變量時可以參考此數據類型定義,但此數據類型只能在改程序內容使用

TYPES: BEGIN OF t_struct,
                col1 TYPE c,
                col2 TYPE i,
                col3 TYPE d,
       END OF t_struct.
DATA: gs_struct TYPE t_struct,
    gv var LIKE gs struct-col1.

3.參照全局數據類型定義變量

利用ABAP數據字典(表/結構體/數據元素等)定義變量的方法,此數據類型在所有程序都可以使用

DATA: gv_carrid TYPE s_carr_id,
      gv_connid TYPE sflight-carrid,
      gv_matnr TYPE mara-matnr.

DATA語句

用於定義數據變量,變量名可以包含_, 長度最長30位

1. TYPE type

定義變量的數據類型

DATA: gv_num TYPE i.

冒號是一個命令從逗號開始, 遇到句號結束

下面的命令效果等同

DATA gv_num1 TYPE I.
DATA gv_num2 TYPE I.

DATA: gv_num1 TYPE I,
      gv_num2 TYPE I.

2. LIKE num

定義與前一個變量相同類型的變量, num可以是任何一種數據類型(字段/參數.結構體/系統變量)

DATA: GV_NUM3 LIKE GV_NUM1.

3.VALUE INT

所有數據類型都存在初始值

DATA語句可以用VALUE選項設置初始值INT

DATA: GV_NUM TYPE I VALUE 123,
      GV_FLAG VALUE X,
      GV_VAL VALUE IS INITIAL
      GV_IDX LIKE SY-TABIX VALUE 45.

VALUE IS INITIAL 變量的初始值為所參照的數據類型的初始值,可以省略,效果一樣

4. LENGTH N

LENGTH N用於指定字段長度, 僅適用數據類型: C/N/P/X

DATA: GV_NUM TYPE N LENGTH 2.

5. DECIMALS N

用於指定1-14位小數,僅適用於數據類型P

DATA: GV_NUM TYPE P DECIMALS 3.

第一個helloworld

REPORT  Z_YZW_HELLOWORLD. "報表名稱
TYPES T_VAR TYPE C LENGTH 20.  "聲明一個局部數據類型為C,長度為20
DATA GV_VAR TYPE T_VAR.  "聲明一個變量,類型使用上面定義的數據類型
GV_VAR = HELLOW ABAP.  "給變量賦值
WRITE GV_VAR.  "打印變量
  • .號表示一行代碼結束
  • 字符串用單引號
  • =號前後要留空格, 和SHELL一樣
  • *號表示一行註釋, "號表示右邊註釋

命名規則

全局變量以G開頭

技術分享圖片

局部變量以L開頭

技術分享圖片

一個好的命名包括:作用範圍/數據類型/含義

數據基本運算中, 浮點數需要調用function FLTP_CHAR_CONVERSION轉換成char類型

DATA GV_F1 TYPE F  VALUE 2.22.
DATA GV_F2 TYPE F VALUE 3.33.
DATA GV_FRESULT TYPE F.
DATA GV_CRESULT TYPE C LENGTH 16.
GV_FRESULT = GV_F1 * GV_F2.
WRITE / GV_FRESULT.

CALL FUNCTION FLTP_CHAR_CONVERSION
exporting
DECIM = 2
INPUT = GV_FRESULT
importing
FLSTR = GV_CRESULT.

WRITE / GV_CRESULT .

ABAP基礎:數據類型