cobol - 假定十进制作为输入 - Tab 并输入添加尾随零

标签 cobol

晚上好,

我刚刚开始学习 Cobol,为了练习,我想编写一个简单的乘法程序,使用用户给出的两个十进制数。

所以我写了以下内容

   IDENTIFICATION DIVISION.
   PROGRAM-ID. exo.

   DATA DIVISION.
   WORKING-STORAGE SECTION.
   77 a PIC 9(2)V9.
   77 b PIC 9(2)V9.
   77 result PIC 9(4)V99.
   screen section.
   1 pla-title.
          2 blank screen.
          2 line 1 col 1 value 'Multiplication'.
   1 pls-numbers.
          2 line 4 col 2 value 'Number 1 : '.
          2 PIC 9(2)V9 to a required.
          2 line 5 col 2 value 'Number 2 : '.
          2 PIC 9(2)V9 to b required.
   1 pla-result.
          2 line 7 col 2 PIC 9(2)V9 from a.
          2 col 7 value 'x'.
          2 col 9 PIC 9(2)V9 from b.
          2 col 13 value '='.
          2 col 15 PIC 9(4)V99 from result.

   PROCEDURE DIVISION.
   display pla-title.
   accept pls-numbers.
   compute result = a * b.
   display pla-result.

   END PROGRAM exo.

这里的问题不是乘法部分,它工作得很好。问题是输入。每次我按 Tab 或 Enter 时,末尾都会添加一个 0。例如,输入 9,9,9,tab,9,9,9,enter 会将 900 乘以 990,因为该格式仅采用 99900(tab+enter)和 9990(enter)的最后三位数字。

我用整数尝试了相同的程序,它运行得很好。我也对实数小数进行了相同的尝试(9(2).9),并且输入有效,但是我在乘法(不是数值)方面遇到了问题,我稍后会尝试理解,当时有一个问题.

简而言之,问题是要知道为什么通过键入 tab 和 Enter 来修改输入,在我的理解中,这是用于导航接受字段的。

非常感谢您的帮助!

最佳答案

如何在接受的字段更改/完成时自动调整输入取决于实际使用的编译器/运行时(在大多数情况下在问题中添加此信息是很好的),但大多数 COBOL 变体都需要一个“. ” (或者在 DECIMAL-POINT IS COMMA 的情况下输入“,”)以获得正确的小数部分。

实际上,带有隐含小数点和 ACCEPT 的结果可能不是您想要的。我建议尝试使用像 ZZ9.99 这样的数字编辑字段(在 MOVE 上自动取消编辑到您使用 [如果存储的数据与ACCEPT之后的编辑符号]匹配)或一个普通的PIC X和一个MOVE FUNCTION NUMVAL(输入字段)TO a(这应该适用于任何包含此函数的编译器)。

关于cobol - 假定十进制作为输入 - Tab 并输入添加尾随零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54117747/

相关文章:

COBOL 中的 XML 具有嵌套表和不同的子项

history - COBOL 历史中未提及的部分

cobol - 怎样才能找到一个5个字符长的字符串的所有排列呢?

file - COBOL - 使用相对和动态选项打开顺序数据集时的文件状态 37

linux - 如何通过shell脚本调用COBOL程序

loops - 这段代码的哪一部分导致了无限循环?

architecture - 将 Boomi 连接到 CICS 主机的推荐方法是什么?

java - 创建具有IBM I系列(AS400)特殊隐藏(不可打印和不可见?)字符的Java文件问题

rabbitmq - 有谁知道如何将 RabbitMQ 与 COBOL 连接?

java - 寻找一种在 Java 中用 Swift 转换抄写本的优雅方法