Cobol 接受签名值作为记录的一部分

Cobol 接受签名值作为记录的一部分,cobol,gnucobol,Cobol,Gnucobol,我有一个相当基本的Cobol程序,用来学习记录结构。当在ACCEPT语句中作为记录的一部分传递带符号的数值时,我注意到gnucobol的奇怪行为 该计划的定义如下: IDENTIFICATION DIVISION. PROGRAM-ID. TEST. DATA DIVISION. WORKING-STORAGE SECTION. 01 Account. 02 Name PIC X(5) VALUE SPACES. 02 Balance PIC S9999V999 VALUE ZEROES

我有一个相当基本的Cobol程序,用来学习记录结构。当在
ACCEPT
语句中作为记录的一部分传递带符号的数值时,我注意到gnucobol的奇怪行为

该计划的定义如下:

IDENTIFICATION DIVISION.
PROGRAM-ID. TEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 Account.
  02 Name PIC X(5) VALUE SPACES.
  02 Balance PIC S9999V999 VALUE ZEROES.
PROCEDURE DIVISION.
MAIN.
  DISPLAY "Enter account details:"
  ACCEPT Account.
  DISPLAY "Balance is:"
  DISPLAY Balance.

  STOP RUN.
Enter account details:
AAAAA-123.456
Balance is:
+-123.045
行为如下:

IDENTIFICATION DIVISION.
PROGRAM-ID. TEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 Account.
  02 Name PIC X(5) VALUE SPACES.
  02 Balance PIC S9999V999 VALUE ZEROES.
PROCEDURE DIVISION.
MAIN.
  DISPLAY "Enter account details:"
  ACCEPT Account.
  DISPLAY "Balance is:"
  DISPLAY Balance.

  STOP RUN.
Enter account details:
AAAAA-123.456
Balance is:
+-123.045
我假设这是由于值是如何存储在原始内存中的

这通常是大多数cobol编译器所做的吗?有没有办法让cobol正确解释带符号的值

我假设这是由于值是如何存储在原始内存中的

这通常是大多数cobol编译器所做的吗

猜测:是的(实际的显示会有所不同,但我确信大多数COBOL环境不会做您似乎想要的事情,至少是这样)

有没有办法让cobol正确解释带符号的值

是的,但是有一些“COBOL”的事情要做:

  • 以内部格式存储数据(就像您所做的那样:带隐含3个小数点位置的有符号值),但对于
    接受
    ,也可能是
    显示
    使用实际包含所需数据的格式,例如a
    PIC+ZZZ9.999$
    ,有关详细信息,请参阅
  • 切勿
    接受
    记录,或者将记录拆分为多个
    接受
    ,或者使用一个记录来接受屏幕名称,而不是记录名称-->使用
    屏幕部分
    输入数据,这将为您提供两个单独的字段和大多数COBOL环境合理的输入验证

有道理,谢谢。我看过一些教程,它们通过
ACCEPT
ing一个完整记录的数据来演示记录是如何工作的,这对我来说似乎有点粗略。很高兴知道这不是通常的做法。