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

Roc*_*und 4 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.
Run Code Online (Sandbox Code Playgroud)

这里的问题不是乘法部分,它完美地运作.问题是输入.每次按Tab键或输入时,最后都会添加0.例如,键入9,9,9,tab,9,9,9,输入乘以900和990,因为格式仅采用99900(tab + enter)和9990(enter)的最后三位数字.

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

简而言之,问题是通过键入tab并输入来了解为什么输入被修改,在我的理解中用于导航接受字段.

非常感谢您的帮助!

Sim*_*sch 5

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

实际上结果带有隐含的小数点,ACCEPT可能不是你想要它做的.我建议尝试使用一个数字编辑的字段ZZ9.99(对MOVE你进行计算的字段进行自动编辑,如果存储的数据与编辑符号匹配后ACCEPT)或平原PIC XMOVE FUNCTION NUMVAL (input-field) TO a之后(这应该适用于包括此功能的任何编译器).