Cobol 接受签名值作为记录的一部分
我有一个相当基本的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
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一个完整记录的数据来演示记录是如何工作的,这对我来说似乎有点粗略。很高兴知道这不是通常的做法。