给定以下代码:
VAR X PIC S9(7)V9(2).
VAR Y PIC X(15)
以下代码有编译错误。
MOVE X TO Y. * compile error.
错误信息类似于“无法将非整数移动到字母数字变量”
有没有什么方法可以在不使用其他变量(例如显示变量)的情况下解决这个问题?
最佳答案
修复有时涉及 REDEFINES,如下所示:
01.
05 Y PIC X(15).
05 X REDEFINES Y PIC S9(7)V9(2).
注意 X
占用的存储空间小于 Y
所以 X
可以 REDEFINE Y
但反过来不行.由于 X
和 Y
现在占用相同的物理存储空间,因此可以删除 MOVE
,如下面的程序和输出所示:
IDENTIFICATION DIVISION.
PROGRAM-ID. EXAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 Y PIC X(15).
01 X REDEFINES Y PIC S9(7)V9(2).
PROCEDURE DIVISION.
MOVE -1234567.89 TO X
DISPLAY 'X: >' X '< Y: >' Y '<'
.
输出:
X: >12345678R< Y: >12345678R <
您很快就会看到,结果可能不是您所希望的,因为 Y
不包含人类可读的格式化数字(即带有前导符号和小数点的数字)。
所以我对您的建议是不要尝试将 COBOL 变成它不是的东西。使用预期使用的语言。您可能需要做的是:
IDENTIFICATION DIVISION.
PROGRAM-ID. EXAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 Y PIC X(15).
01 X PIC S9(7)V9(2).
01 T PIC -9(7).99.
PROCEDURE DIVISION.
MOVE -1234567.89 TO X
MOVE X TO T
MOVE T TO Y
DISPLAY 'X: >' X '< Y: >' Y '<'
GOBACK
.
哪些输出:
X: >12345678R< Y: >-1234567.89 <
是的,上面的程序在中间使用了一个额外的变量来将数字格式转换为显示格式,但这正是语言的设计方式。冗长但非常直截了当。在练习变量 Y
的末尾,包含一些可读且对正常人眼有意义的内容。
关于cobol - 如何在 COBOL 中将十进制值转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8339147/