Cobol 假定十进制为输入-制表符并输入添加尾随零

Cobol 假定十进制为输入-制表符并输入添加尾随零,cobol,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-t

晚上好,

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

简言之,问题是要知道为什么输入会通过键入tab和enter进行修改,据我所知,这是用来导航accept字段的


非常感谢你的帮助

如何在accept的字段更改/完成时自动调整输入取决于实际使用的编译器/运行时(在大多数情况下,最好在问题中添加此信息),但大多数COBOL变体需要输入“.”(或者在
小数点为逗号的情况下,”),以获得正确的小数部分


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

只想补充:根据您获得第一个徽章的教程,这是一个很好的问题;-)谢谢您的建议,我现在已经完成了。的确,我在这次旅行中学到了一些东西:)谢谢你的回答。成功了。我曾经尝试过类似的方法来避免
不是数值的错误,但是我没有正确地执行。编译器是GnuCOBOL 2.2.0,很抱歉忘记了这些信息。我曾尝试在输入字段中添加一个“.”或“,”,但似乎不起作用。我必须承认,即使问题已经解决,我仍然不明白
ACCEPT
和隐含十进制数的问题是什么。