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

标签 cobol

给定以下代码:

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 但反过来不行.由于 XY 现在占用相同的物理存储空间,因此可以删除 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/

相关文章:

cobol - 使用数组按顺序打印记录

cobol - 在源代码中嵌入编译器选项

java - C# 中的 COBOL 到 Java 转换器

cobol - 查看由IBM Enterprise COBOL编译器生成的代码

cobol - fileaid 中的字帖错位

cobol - COBOL 移动到 comp-3 变量时出现问题

mysql - DB2 SQL 对具有不同数据类型的多个表的联合进行计数

programming-languages - 学习和使用 "old"语言 (Ada/Cobol/Algol)

c++ - 一个简单的cobol程序需要重新编码为C++程序来读取包装安全软件传递的环境变量

cobol - STRING 动词的行为