首页 > 解决方案 > 假定十进制作为输入 - 制表符并输入添加尾随零

问题描述

晚上好,

我刚开始学习 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

解决方案


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

实际上带有隐含小数点的结果ACCEPT可能不是您想要的。我ZZ9.99MOVE_ ACCEPT_ PIC X_ MOVE FUNCTION NUMVAL (input-field) TO a_在包括这个函数的任何编译器上工作)。


推荐阅读