У меня довольно простая c программа Cobol, которую я использую, чтобы узнать о структурах записей. Я замечаю странное поведение с gnucobol при передаче значений чисел c со знаком как части записи в операторе ACCEPT
.
Программа определяется следующим образом:
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 правильно интерпретировать значение со знаком?