Я искал s9 (5) v99, но получил другую информацию и не совсем понятный. Может ли кто-нибудь показать, как или формула для преобразования. спасибокак отформатировать номер до S9 (5) V99 ascii in .net
ответ
PIC S9(5)v99
не является числовым форматом. Это описание того, как хранятся данные и что там означает. Например, число, сохраненное как «-0010000», означает -100,00.
Что именно вы пытаетесь достичь? Вы пытаетесь отправить decimal
-100.00 в программу COBOL?
PIC -99,999.00
является формат числа. Он указывает использовать знак минус минус, если число отрицательное, использовать пять цифр перед десятичной точкой, с запятой между тысячами, десятичной точкой, а затем ровно двумя цифрами после. Число, сохраненное в поле PIC S9(5)V99
, может быть смещено в поле PIC -99,999.00
.
То, что вы показали нам здесь, является : 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
.
благодарит Нила за информацию о comp-3. – user392973
@ user392973 @John Saunders. Основываясь на вашем комментарии к Джону Сондерсу, возможно, что тип ИСПОЛЬЗОВАНИЯ, который ищет ваш клиент, не является PACKED-DECIMAL, а DISPLAY (лучше уточните это с вашим клиентом). Если ИСПОЛЬЗОВАНИЕ - DISPLAY, просто выделите 8-байтовую строку и отформатируйте номер, как указано в ответе, который дал вам Джон. Если целевой средой является мэйнфрейм IBM, следующий бит для просмотра - это проблемы с кодовой страницей между наборами символов EBCDIC/ASCII. – NealB
Если эти люди хотят, чтобы веб-служба отправляла их PACKED-DECIMAL или EBCDIC, им необходимо просыпаться и чувствовать запах десятилетия. –
S в cobol - это определение знакового числового поля (т.е. может быть положительным или отрицательным). Так, например, S999 является подписанным 3-значным цифровым (двоичным). Проблема заключается в том, что S предполагается, и в большинстве комболистов коболов знак метки отмечен «перепутыванием» последнего символа другим символом, означающим «плюс» или «минус». Это приводит к тому, что если вы посмотрите на поле в браузере ascii, у вас будет странный характер. То есть. MINUS 500 будет выглядеть примерно так: 50C или 50} в зависимости от базового символа, и если бы это было + или - то, что было переполнено.
Почему вы чувствуете, что S999 является «двоичным»? Этого не должно быть. S «подразумевается», а не «предполагается». ИСПОЛЬЗОВАНИЕ полей DISPLAY «переполнены», упакованные-десятичные/comp-3 или двоичные/comp/comp-4/comp-5 не являются, поскольку они не будут «перфорированы» в первую очередь. «50C» будет положительным, 503, «50» - «-500». Если бы это было «+», которое было переполнено, это было бы положительным числом. –
Я хочу загрузить файл в веб-службу. По их спецификации поле суммы находится в формате S9 (5) V99 – user392973
Я хочу загрузить файл в веб-службу. По их спецификации поле суммы находится в формате S9 (5) V99. Поле суммы в нашей базе данных sql является десятичным полем – user392973
@user: они должны изучать язык, отличный от COBOL. S9 (5) V99 не имеет смысла никому, кроме программиста COBOL. –