%UINT 内置函数
%UINT 将字符,逻辑,十进制或整数数据转换为无符号整数格式。 可以将转换后的值分配给 CL 变量,将其作为数字常量传递给另一个程序或过程,或者将其指定为从编译的 CL 运行的 CL 命令的命令参数的值。
可在 CL 支持算术表达式的任何位置使用 %UINT 内置函数。 %UINT 可以单独使用,也可以作为更复杂的算术表达式的一部分使用。 例如,可以使用 %UINT 将十进制 CL 变量与 IF 或 WHEN 命令的 COND 参数中的无符号整数 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 ' 是有效参数。
- All-blank 值将返回零值。
- 如果找到无效的数字数据,那么 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))