如何在COBOL中将十进制值转换为字符串

如何在COBOL中将十进制值转换为字符串,cobol,Cobol,给定以下代码: VAR X PIC S9(7)V9(2). VAR Y PIC X(15) 下面的代码有编译错误 MOVE X TO Y. * compile error. 错误消息类似于“无法将非整数移动到字母数字变量” 是否有任何方法可以在不使用其他变量(例如显示变量)的情况下解决此问题?取决于您希望Y包含的内容,否 01 VARS. 05 X PIC S9(7)V9(2). 05 Y REDEFINES X PIC X(9). 05 Z PIC

给定以下代码:

VAR X  PIC S9(7)V9(2).
VAR Y PIC X(15)
下面的代码有编译错误

MOVE  X TO Y.    * compile error.
错误消息类似于“无法将非整数移动到字母数字变量”


是否有任何方法可以在不使用其他变量(例如显示变量)的情况下解决此问题?

取决于您希望Y包含的内容,否

01  VARS.
    05  X PIC S9(7)V9(2).
    05  Y REDEFINES X PIC X(9).
    05  Z PIC -9(7).99.
    05  Q PIC X(11).

    MOVE X TO Z
    MOVE Z TO Q
    DISPLAY Y
    DISPLAY Q
尝试一下,看看是什么给了你想要的答案


注意,这只是徒手操作,我还没有尝试编译它。

修复程序有时涉及重新定义,如:

01.
    05 Y PIC X(15).
    05 X REDEFINES Y PIC S9(7)V9(2).
请注意,
X
Y
占用更少的存储空间,因此
X
可以
重新定义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: >-1234567.89    <
X:>12345678R-1234567.89<

是的,上面的程序在中间使用一个额外的变量来将数字格式转换成显示格式,但这正是语言设计的方式。长篇大论但很直截了当。在练习结束时,变量

Y
包含正常人眼可读且有意义的内容。

识别部分。
IDENTIFICATION DIVISION. 
PROGRAM-ID. EXAMPLE. 
DATA DIVISION. 
WORKING-STORAGE SECTION. 
01  Y PIC X(15). 
01  T REDEFINES Y PIC -(5)9(7).99.
01  U REDEFINES Y PIC -9(7).99B(4).
01  X PIC S9(7)V9(2). 
PROCEDURE DIVISION. 
    MOVE -1234567.89 TO X 
    MOVE X TO T 
    DISPLAY 'X: >' X '< Y: >' Y '<'
    MOVE X TO U 
    DISPLAY 'X: >' X '< Y: >' Y '<'
    GOBACK 
    . 
程序ID。示例。 数据司。 工作和储存科。 01 Y图X(15)。 01T重新定义了Y PIC-(5)9(7).99。 01U重新定义了Y PIC-9(7).99B(4)。 01 X PIC S9(7)V9(2)。 程序司。 将-1234567.89移动到X 将X移到T 显示'X:>'X''Y'X''Y'
X: >12345678R< Y: >-1234567.89    <
IDENTIFICATION DIVISION. 
PROGRAM-ID. EXAMPLE. 
DATA DIVISION. 
WORKING-STORAGE SECTION. 
01  Y PIC X(15). 
01  T REDEFINES Y PIC -(5)9(7).99.
01  U REDEFINES Y PIC -9(7).99B(4).
01  X PIC S9(7)V9(2). 
PROCEDURE DIVISION. 
    MOVE -1234567.89 TO X 
    MOVE X TO T 
    DISPLAY 'X: >' X '< Y: >' Y '<'
    MOVE X TO U 
    DISPLAY 'X: >' X '< Y: >' Y '<'
    GOBACK 
    . 
X: >12345678R< Y: >    -1234567.89<
X: >12345678R< Y: >-1234567.89    <