【发布时间】:2011-05-26 04:36:15
【问题描述】:
字母数字移动到数字变量导致意外结果。这是代码:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-VAR-STR PIC X(3) VALUE SPACES.
01 WS-VAR-NUM PIC 9(3) VALUE ZEROES.
PROCEDURE DIVISION.
MOVE '1' TO WS-VAR-STR
MOVE WS-VAR-STR TO WS-VAR-NUM
DISPLAY 'STRING > ' WS-VAR-STR '< MOVED > ' WS-VAR-NUM '<'
IF WS-VAR-NUM >= 40 AND <= 59
DISPLAY 'INSIDE IF >' WS-VAR-NUM
ELSE
DISPLAY 'INSIDE ELSE >' WS-VAR-NUM
END-IF
GOBACK
.
OUTPUT:
STRING > 1 < MOVED > 1 0<
INSIDE ELSE >1 O
结果很奇怪,想弄清楚为什么将“1”作为“1 0”移动到数字变量中,有趣的是,调节它也没有问题。分享你的观点。感谢您的关注。
【问题讨论】:
-
我会检查这是否不是 DISPLAY 错误(或功能)。尝试写
IF WS-VAR-NUM EQUAL 1 THEN ...查看真实内容。 -
尝试将“001”移动到 WS-VAR-STR。将“1”移动到 WS-VAR-STR 移动“1”。 Move 不进行类型转换。
-
@belisarius 您提供的链接中的转换子程序是我们的做法。它删除非数字字符,右对齐数字字符并用零填充字段。然后可以将此结果移至数值字段。
标签: cobol mainframe alphanumeric