假定十进制作为输入 - 选项卡并输入添加尾随零

assumed decimal as input - tab and enter add trailing zeros

晚上好,

我刚开始学习 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 来修改输入,在我的理解中,它用于导航接受字段。

非常感谢您的帮助!

accept 字段change/finish 上的输入如何自动调整取决于实际使用的compiler/runtime(在大多数情况下,在问题中添加此信息是很好的),但大多数情况下COBOL 变体需要一个“.” (或者在 DECIMAL-POINT IS COMMA 的情况下输入“,”)以获得正确的小数部分。

实际上,带有隐含小数点和 ACCEPT 的结果可能不是您想要的结果。我建议尝试使用像 ZZ9.99 这样的数字编辑字段(它在 MOVE 上自动取消编辑到你用 [if the stored data matches the editing symbols] 进行计算的字段ACCEPT) 或普通的 PIC X 和之后的 MOVE FUNCTION NUMVAL (input-field) TO a (这应该适用于任何包含此功能的编译器)。