COBOL中的小数

COBOL中的小数,cobol,microfocus,Cobol,Microfocus,我对COBOL很陌生。我正在学习Micro Focus附带的教程,但我似乎无法让示例正常工作。我试着打印-123.45,我不断得到以下信息 我在这里查阅了一些帖子,但它们没有解决我的问题。我用的是Micro Focus的视觉COBOL。这是我的密码 program-id. tictac as "tictac". environment division. configuration section. data division. working-storage

我对COBOL很陌生。我正在学习Micro Focus附带的教程,但我似乎无法让示例正常工作。我试着打印-123.45,我不断得到以下信息

我在这里查阅了一些帖子,但它们没有解决我的问题。我用的是Micro Focus的视觉COBOL。这是我的密码

   program-id. tictac as "tictac".

   environment division.
   configuration section.

   data division.
   working-storage section.

    01 WS-NUM3 PIC S9(3)V9(2) VALUE -123.45.


   procedure division.
       Display WS-NUM3.
       goback.

   end program tictac.

picture子句中的
V
是一个隐含的小数点。我想您需要一个带有
PIC-999.99
的字段,其中
是其picture子句的一个显式小数点

您可能会认为这是COBOL对变量的定义和显示方式进行了区分。有点像
printf
中的格式字符串,它只是指定如何显示变量,而不是如何定义变量。尽管在这两种情况下,定义和显示方式必须在一定程度上匹配

为数字字段选择正确的picture子句很重要;如果您正在进行计算,它可能会对性能产生重大影响

所以通常有一个定义为

PIC 9(4)V99 COMP-3
PIC ZZZ9.99
…和用于输出目的的相应字段,例如

PIC 9(4)V99 COMP-3
PIC ZZZ9.99

…这样就可以对第一个字段进行计算,并且在需要显示字段时,可以使用
MOVE
语句将第一个字段的内容复制到第二个字段。

另一种选择可能是
01 WS-NUM3 PIC S9(3)V9(2)符号前导独立值-123.45。