%UINT 內建函數
%UINT 會將字元、邏輯、十進位或整數資料轉換成不帶正負號的整數格式。 轉換值可以指派給 CL 變數,以數值常數傳遞給另一個程式或程序,或指定為從已編譯 CL 執行之 CL 指令的指令參數值。
%UINT 內建函數可以在 CL 支援算術表示式的任何地方使用。 %UINT 可以單獨使用,也可以作為更複雜的算術表示式的一部分。 例如,在 IF 或 WHEN 指令的 COND 參數中, %UINT 可以用來比較十進位 CL 變數與不帶正負號的整數 CL 變數。 如果相關指令物件定義具有 EXPR (*YES) 且 TYPE 為 *DEC、 *INT2、 *INT4、 *UINT2或 *UINT4的參數,則 %UINT 也可以用來設定 CL 指令參數的值。
轉換為不帶正負號的整數資料內建函數的格式為:
%UINT(convert-argument)它也可以格式化為:
%UNS(convert-argument)convert-argument 必須是 TYPE 為 *CHAR、*LGL、*DEC 或 *INT 的 CL 變數。
如果 convert-argument 參數是字元變數,則適用下列規則:
- 符號是選用的。 它只能是 '+'。 它可以在數值資料之前或之後。
- 小數點是選用的。 它可以是句點或逗點。
- 資料中容許前導及尾端空白。 例如, ' + 3 ' 是有效的參數。
- 全部-空白值將會傳回零值。
- 如果發現無效的數值資料,則會發生異常狀況,並出現 CPF0818。
結果將採用不帶正負號的整數格式,任何小數位數都會被截斷而不捨入。 結果的大小一律為 4 個位元組。
下列是使用 %UINT 內建函數的範例:
附註: * 容許 %UNS 與 RPG 相容,但程式碼範例將使用 %UINT。
- 轉換字元變數
DCL VAR(&POINTS) TYPE(*CHAR) LEN(10) VALUE('+123.45') DCL VAR(&ANSWER) TYPE(*UINT) /* &ANSWER will have the value 223 */ CHGVAR VAR(&ANSWER) VALUE(100 + %UINT(&POINTS)) - 轉換邏輯變數
DCL VAR(&ANSWER1) TYPE(*LGL) VALUE('1') DCL VAR(&ANSWER2) TYPE(*LGL) VALUE('1') DCL VAR(&NUM) TYPE(*UINT) /* &NUM will have the value 2. */ CHGVAR VAR(&NUM) VALUE(%UINT(&ANSWER1) + %UINT(&ANSWER2)) SNDPGMMSG MSG('The number of YES answers is' *BCAT %CHAR(&NUM)) - 轉換壓縮十進位變數
DCL VAR(&POINTS1) TYPE(*DEC) LEN(5 2) VALUE(100.23) DCL VAR(&POINTS2) TYPE(*DEC) LEN(5 2) VALUE(100.45) IF (%UINT(&POINTS1) *EQ %UINT(&POINTS2)) + THEN(SNDPGMMSG ('The scores are the same!')) - 轉換整數變數
DCL VAR(&P1) TYPE(*UINT) LEN(2) DCL VAR(&P2) TYPE(*INT) LEN(2) VALUE(1) CHGVAR VAR(&P1) VALUE(%UINT(&P2)) - 小數位數將被截斷而不捨入
DCL VAR(&STRING) TYPE(*CHAR) LEN(10) VALUE('+123.9') DCL VAR(&ANSWER) TYPE(*UINT) /* &ANSWER will have the value 123 */ CHGVAR VAR(&ANSWER) VALUE(%UINT(&STRING))