假定小数作为输入-制表符,然后输入添加尾随零

时间:2019-01-09 20:22:02

标签: 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来修改输入,据我所知,该输入用于导航接受字段。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

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

实际上,带隐含小数点和ACCEPT的结果可能不是您想要的。我建议尝试使用ZZ9.99之类的数字编辑字段(在MOVE上自动取消编辑到您使用[如果存储的数据与编辑符号匹配时]进行计算的字段ACCEPT或之后的普通PIC X和之后的MOVE FUNCTION NUMVAL (input-field) TO a(这适用于包括该函数的所有编译器)。