как отформатировать число в S9 (5) V99 ascii в .net - PullRequest
5 голосов
/ 15 июля 2010

Я искал s9 (5) v99, но получил другую информацию и не совсем ясно. Может ли кто-то показать, как или формула для преобразования. спасибо

Ответы [ 3 ]

15 голосов
/ 16 июля 2010

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

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

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

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

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

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

Запись упакованных десятичных данных в отчет или на терминал не работает особенно хорошо.Сначала вы должны преобразовать его в формат 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

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

2 голосов
/ 29 января 2013

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

0 голосов
/ 15 июля 2010

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

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


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

...