如何将 COMP-5 值移动到数字字段?
How to move COMP-5 values to a Numeric field?
我正在尝试将 COMP-5 变量(我从其他系统接收的)移动到数字字段。我注意到,当我显示 COMP-5 变量时,我可以看到该值,但是当我尝试移动它时,COMP-5 变量中的值变为 zeros.I 没有任何使用 COMP-5 的经验。有人可以帮我解决这个问题吗?
代码:
09 O-Xid.
12 O-Xid2-length PIC S9999 COMP-5 SYNC.
12 O-Xid2 PIC X(255).
09 WS-O-Xid.
12 WS-O-Xid2-length PIC 9999.
12 WS-O-Xid2 PIC X(255).
MOVE O-Xid2-length TO WS-O-Xid2-length
MOVE O-Xid2 TO WS-O-Xid2
只要数据有效,MOVE
就会在任何数字 USAGE
之间进行任何必要的转换。
代码遗漏了实际的 DISPLAY
语句,我 假设 您已经使用 DISPLAY O-Xid2-length
测试了有效数据(请指定输出)。
目标不包含源值的最可能原因是:
您使用的 COBOL 环境(您既没有指定编译器也没有指定您使用的选项)不会根据 ANSI/ISO 截断 COMP-5 值 - 因此它可能包含“10000”,然后在 MOVE
因为目标无法保存该值(此处发生的标准截断仅保留最后 4 位数字)。
所有其他情况都会出现“字段中没有您认为的数据”——再次说明:请同时指定“DISPLAY”语句和结果。
TRUNC(BIN)
的附加信息:根据 docs:
BINARY
当接收方为数字时,发送字段被处理为半字、全字或双字
DISPLAY
将转换二进制字段的全部内容,不截断。
DISPLAY
也会显示类似 30000 的值,我 认为 在这种情况下 MOVE
会导致零值。
对于其他用法,存储在变量中的值可能实际上不是有效数据,但这不适用于BINARY
(或COMP-5
项)。在这种情况下,使用的 COBOL 环境可以对 DISPLAY
进行一些自动更正,但对 MOVE
只需将无效值更改为 ZERO
;检查您是否需要使用调试器或十六进制转储收到的值。
我正在尝试将 COMP-5 变量(我从其他系统接收的)移动到数字字段。我注意到,当我显示 COMP-5 变量时,我可以看到该值,但是当我尝试移动它时,COMP-5 变量中的值变为 zeros.I 没有任何使用 COMP-5 的经验。有人可以帮我解决这个问题吗?
代码:
09 O-Xid.
12 O-Xid2-length PIC S9999 COMP-5 SYNC.
12 O-Xid2 PIC X(255).
09 WS-O-Xid.
12 WS-O-Xid2-length PIC 9999.
12 WS-O-Xid2 PIC X(255).
MOVE O-Xid2-length TO WS-O-Xid2-length
MOVE O-Xid2 TO WS-O-Xid2
MOVE
就会在任何数字 USAGE
之间进行任何必要的转换。
代码遗漏了实际的 DISPLAY
语句,我 假设 您已经使用 DISPLAY O-Xid2-length
测试了有效数据(请指定输出)。
目标不包含源值的最可能原因是:
您使用的 COBOL 环境(您既没有指定编译器也没有指定您使用的选项)不会根据 ANSI/ISO 截断 COMP-5 值 - 因此它可能包含“10000”,然后在 MOVE
因为目标无法保存该值(此处发生的标准截断仅保留最后 4 位数字)。
所有其他情况都会出现“字段中没有您认为的数据”——再次说明:请同时指定“DISPLAY”语句和结果。
TRUNC(BIN)
的附加信息:根据 docs:
BINARY
当接收方为数字时,发送字段被处理为半字、全字或双字DISPLAY
将转换二进制字段的全部内容,不截断。
DISPLAY
也会显示类似 30000 的值,我 认为 在这种情况下 MOVE
会导致零值。
对于其他用法,存储在变量中的值可能实际上不是有效数据,但这不适用于BINARY
(或COMP-5
项)。在这种情况下,使用的 COBOL 环境可以对 DISPLAY
进行一些自动更正,但对 MOVE
只需将无效值更改为 ZERO
;检查您是否需要使用调试器或十六进制转储收到的值。