2010-07-15 1 views

ответ

0

PIC S9(5)v99 не является числовым форматом. Это описание того, как хранятся данные и что там означает. Например, число, сохраненное как «-0010000», означает -100,00.

Что именно вы пытаетесь достичь? Вы пытаетесь отправить decimal -100.00 в программу COBOL?


PIC -99,999.00является формат числа. Он указывает использовать знак минус минус, если число отрицательное, использовать пять цифр перед десятичной точкой, с запятой между тысячами, десятичной точкой, а затем ровно двумя цифрами после. Число, сохраненное в поле PIC S9(5)V99, может быть смещено в поле PIC -99,999.00.

+0

Я хочу загрузить файл в веб-службу. По их спецификации поле суммы находится в формате S9 (5) V99 – user392973

+0

Я хочу загрузить файл в веб-службу. По их спецификации поле суммы находится в формате S9 (5) V99. Поле суммы в нашей базе данных sql является десятичным полем – user392973

+0

@user: они должны изучать язык, отличный от COBOL. S9 (5) V99 не имеет смысла никому, кроме программиста COBOL. –

13

То, что вы показали нам здесь, является : PICTURE раздел части декларации данных COBOL.

Объявления данных COBOL немного странны и немного привыкают. Вот ссылка на вводный учебник на COBOL data declarations. Это должно заставить вас начать.

Предложение PICture вы дали в вашем вопросе определения числовой элемент со следующими характеристиками:

  • S - ведущий знак
  • 9(5) - 5 десятичных цифр
  • V - Подразумевается десятичной точки
  • 99 - 2 цифры после запятой десятичной точки

В основном, вы сообщаете компилятору COBOL для определения числовой переменной, способной удерживать значения -99999.99 до +99999.99. Точно, как компилятор выполнит этот запрос , зависит от конкретного предложения USAGE. Однако для числовых элементов, содержащих фиксированную десятичную позицию , «нормальный» ИСПОЛЬЗОВАНИЕ: PACKED-DECIMAL или COMP-3 (это всего лишь разные названия, что означает одно и то же). Этот link содержит некоторую вводную информацию о представлении хранения упакованных десятичных данных.

Упакованные десятичные данные полезны для выполнения числовых вычислений, где число десятичных точек должно быть .

Запись упакованных десятичных данных в отчет или терминал не работает особенно хорошо. Вы должны сначала преобразовать его в формат DISPLAY. Это включает MOVE с упакованным десятичным значением в другую переменную с атрибутом USAGE DISPLAY. Предположим, что ваша упакованная десятичная переменная была вызвана PACKED-DECIMAL-NBR и держала значение -2345.01.Вы можете определить переменную дисплей держать его как:

01 DISPLAY-NBR  PIC+++,++9.99. 

тогда, когда приходит время, чтобы написать/отобразить значение, содержащееся в PACKED-DECIMAL-NBR вы бы сделать что-то вроде:

MOVE PACKED-DECIMAL-NBR TO DISPLAY-NBR 
DISPLAY DISPLAY-NBR 

The MOVE новообращенных упакованное десятичное число к представлению символа, которое вы можете отображать в отчетах или на терминале . Отображается значение -2,345.01.

+0

благодарит Нила за информацию о comp-3. – user392973

+0

@ user392973 @John Saunders. Основываясь на вашем комментарии к Джону Сондерсу, возможно, что тип ИСПОЛЬЗОВАНИЯ, который ищет ваш клиент, не является PACKED-DECIMAL, а DISPLAY (лучше уточните это с вашим клиентом). Если ИСПОЛЬЗОВАНИЕ - DISPLAY, просто выделите 8-байтовую строку и отформатируйте номер, как указано в ответе, который дал вам Джон. Если целевой средой является мэйнфрейм IBM, следующий бит для просмотра - это проблемы с кодовой страницей между наборами символов EBCDIC/ASCII. – NealB

+0

Если эти люди хотят, чтобы веб-служба отправляла их PACKED-DECIMAL или EBCDIC, им необходимо просыпаться и чувствовать запах десятилетия. –

2

S в cobol - это определение знакового числового поля (т.е. может быть положительным или отрицательным). Так, например, S999 является подписанным 3-значным цифровым (двоичным). Проблема заключается в том, что S предполагается, и в большинстве комболистов коболов знак метки отмечен «перепутыванием» последнего символа другим символом, означающим «плюс» или «минус». Это приводит к тому, что если вы посмотрите на поле в браузере ascii, у вас будет странный характер. То есть. MINUS 500 будет выглядеть примерно так: 50C или 50} в зависимости от базового символа, и если бы это было + или - то, что было переполнено.

+1

Почему вы чувствуете, что S999 является «двоичным»? Этого не должно быть. S «подразумевается», а не «предполагается». ИСПОЛЬЗОВАНИЕ полей DISPLAY «переполнены», упакованные-десятичные/comp-3 или двоичные/comp/comp-4/comp-5 не являются, поскольку они не будут «перфорированы» в первую очередь. «50C» будет положительным, 503, «50» - «-500». Если бы это было «+», которое было переполнено, это было бы положительным числом. –