2010-07-15 9 views

Respuesta

0

PIC S9(5)v99 no es un formato numérico. Es una descripción de cómo se almacenan los datos y lo que significa allí. Por ejemplo, un número almacenado como "-0010000" significa -100.00.

¿Qué es exactamente lo que estás tratando de lograr? ¿Está tratando de enviar un decimal -100.00 a un programa COBOL?


PIC -99,999.00 es un formato de número. Especifica usar un signo menos adelantado si el número es negativo, para usar cinco dígitos antes del lugar decimal, con una coma entre los miles, un punto decimal, y luego exactamente dos dígitos después. Un número almacenado en un campo PIC S9(5)V99 podría moverse razonablemente a un campo PIC -99,999.00.

+0

Quiero subir un archivo a un servicio web. Según su especificación, el campo de cantidad está en el formato S9 (5) V99 – user392973

+0

Quiero subir un archivo a un servicio web. Según su especificación, el campo de cantidad está en el formato S9 (5) V99. El campo de cantidad en nuestra base de datos sql es el campo decimal – user392973

+0

@user: deben aprender un idioma que no sea COBOL. S9 (5) V99 no tiene sentido para nadie que no sea un programador de COBOL. –

13

Lo que nos ha mostrado aquí es la parte de la cláusula PICTURE de una declaración de datos COBOL.

Las declaraciones de datos COBOL son un poco raras y se puede acostumbrar un poco. Aquí hay un enlace a un tutorial introductorio en COBOL data declarations. Esto debería comenzar.

La cláusula de imagen que ha dado en su pregunta es la definición de un elemento numérico con los siguientes características:

  • S - signo inicial
  • 9(5) - 5 dígitos decimales
  • V - coma decimal implícita
  • 99 - 2 dígitos después del punto decimal implícito

Básicamente, le está diciendo al compilador COBOL que defina una variable numérica capaz de contener los valores -99999.99 a +99999.99. La forma exacta en que el compilador cumplirá con esta solicitud depende de la cláusula específica USAGE. Sin embargo, para los elementos numéricos que contienen una posición decimal fija , el USO 'normal' es PACKED-DECIMAL o COMP-3 (estos son solo nombres diferentes que significan lo mismo). Este link proporciona información introductoria sobre la representación de almacenamiento de datos decimales empaquetados.

Los datos decimales empaquetados son útiles para hacer cálculos numéricos donde el número de puntos decimales debe permanecer fijo.

Escribir datos decimales empaquetados en un informe o terminal no funciona muy bien. Debe primero convertirlo a un formato capaz DISPLAY. Esto implica MOVE ing el valor decimal empaquetado a otra variable con un atributo USAGE DISPLAY. Supongamos que su variable decimal empaquetada se llamó PACKED-DECIMAL-NBR y tenía el valor -2345.01.Se podría definir una variable pantalla para sostenerlo como:

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

luego, cuando llega el momento de escribir/visualizar el valor contenido en PACKED-DECIMAL-NBR le hacer algo como:

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

Los MOVE conversos el número decimal empaquetado a una representación de caracteres que puede mostrarse en informes o en el terminal . Se muestra el valor -2,345.01.

+0

gracias a Neal por la información sobre comp-3. – user392973

+0

@ user392973 @ John Saunders. Según su comentario a John Saunders, es posible que el tipo de USO que su cliente está buscando no sea EMPACADO-DECIMAL sino DISPLAY (mejor aclare eso con su cliente). Si USAGE es DISPLAY, simplemente asigna una cadena de 8 bytes y formatea el número como se indica en la respuesta que John te dio. Si el entorno de destino es un mainframe IBM, el siguiente bit a tener en cuenta son los problemas de la página de códigos entre conjuntos de caracteres EBCDIC/ASCII. – NealB

+0

Si estas personas quieren un servicio web para enviarlos PACKED-DECIMAL o EBCDIC, entonces deben despertarse y oler la década. –

2

S en cobol es la definición de un campo numérico con signo (es decir, puede ser positivo o negativo). Entonces, por ejemplo, S999 es un número de 3 dígitos con signo (binario). El problema es que se asume S, y en la mayoría de los compiladores de cobol, la forma en que se marca el signo es "sobreimprimir" el último carácter con otro carácter para significar más o menos. Esto resulta, si miras el campo en un navegador ASCII, tendrás un personaje extraño. Es decir. MINUS 500 se vería aproximadamente como 50C o 50} dependiendo del personaje subyacente y si fuera un + o - que se hubiera sobrepasado.

+1

¿Por qué siente que S999 es "binario"? No necesita ser. S es "implícito", no "asumido". Los campos de USO DE PANTALLA están "saturados", empaquetados-decimal/comp-3 o binarios/comp/comp-4/comp-5 no lo son, ya que en primer lugar no serían "perforados". "50C" sería positivo 503, "50}" es -500. Si hubiera un "+" que se había sobrepasado, entonces sería un número positivo. –

Cuestiones relacionadas