接受带符号的值作为记录的一部分

问题描述 投票:2回答:1

我有一个相当基本的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

我认为这是由于该值如何存储在原始内存中。

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

cobol gnucobol
1个回答
0
投票

我认为这是由于该值如何存储在原始内存中。

通常,大多数cobol编译器都这样做吗?

一个猜测:是的(实际显示会有所不同,但是我敢肯定,至少在这种情况下,大多数COBOL环境不会满足您的期望)]

是否有办法让cobol正确解释带符号的值?

是,但是有“ COBOL”要做:

  • 以内部格式存储数据(就像您所做的那样:带隐含3个小数位的带符号的值),但是对于ACCEPT以及DISPLAY也可能使用一种实际具有所需数据的格式,例如PIC +ZZZ9.999$
  • 使用SCREEN SECTION输入数据,这将为您提供两个单独的字段,并且为大多数COBOL环境提供合理的输入验证。
© www.soinside.com 2019 - 2024. All rights reserved.