2010-07-15 11 views

risposta

0

PIC S9(5)v99 non è un formato numerico. È una descrizione di come vengono memorizzati i dati e cosa significa lì. Ad esempio, un numero memorizzato come "-0010000" significa -100,00.

Che cosa stai cercando di realizzare esattamente? Stai cercando di inviare un decimal -100.00 a un programma COBOL?


PIC -99,999.00è un formato numerico. Specifica di usare un segno meno negativo se il numero è negativo, di usare cinque cifre prima della cifra decimale, con una virgola tra le migliaia, un punto decimale, quindi esattamente due cifre dopo. Un numero memorizzato in un campo PIC S9(5)V99 potrebbe essere ragionevolmente spostato in un campo PIC -99,999.00.

+0

Desidero caricare un file su un servizio Web. Per le loro specifiche, il campo dell'importo è nel formato S9 (5) V99 – user392973

+0

Voglio caricare un file su un servizio web. Secondo le loro specifiche, il campo dell'importo è nel formato S9 (5) V99. Il campo quantità nel nostro database sql è il campo decimale – user392973

+0

@user: dovrebbero imparare una lingua diversa da COBOL. S9 (5) V99 non ha significato per nessuno che non sia un programmatore COBOL. –

13

Quello che ci avete mostrato qui è la parte di clausola PICTURE di una dichiarazione di dati COBOL.

Le dichiarazioni di dati COBOL sono un po 'strane e ci vuole un po' di tempo per abituarsi. Ecco un collegamento a un tutorial introduttivo su COBOL data declarations. Questo dovrebbe iniziare.

La clausola di immagine che hai dato nella tua domanda è la definizione di una voce numerica con le seguenti caratteristiche:

  • S - Leading segno
  • 9(5) - 5 cifre decimali
  • V - punto decimale implicita
  • 99 - 2 cifre dopo il punto decimale implicito

In pratica, si sta dicendo al compilatore COBOL di definire una variabile numerica in grado di contenere i valori da -99999.99 a +99999.99. Esattamente come il compilatore soddisferà questa richiesta dipende dalla specifica clausola USAGE. Tuttavia, per gli articoli numerici contenenti una posizione decimale fissa , l'UTENTE "normale" è PACKED-DECIMAL o COMP-3 (questi sono solo nomi diversi che indicano la stessa cosa). Questo link fornisce alcune informazioni introduttive riguardanti la rappresentazione di archiviazione dei dati decimali compressi.

I dati decimali preconfigurati sono utili per eseguire calcoli numerici in cui il numero di punti decimali deve essere rimanente.

La scrittura di dati decimali compressi su un rapporto o terminale non funziona particolarmente bene. È necessario convertirlo prima in un formato adatto a DISPLAY. Ciò implica il valore decimale compresso di MOVE in un'altra variabile con un attributo USAGE DISPLAY. Supponiamo che la variabile decimale compressa sia stata chiamata PACKED-DECIMAL-NBR e che stia mantenendo il valore -2345.01.Si potrebbe definire una variabile di visualizzazione per tenerlo come:

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

poi quando arriva il momento di scrivere/visualizzare il valore contenuto in PACKED-DECIMAL-NBR si fare qualcosa di simile:

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

I MOVE convertiti il numero decimale impacchettato in una rappresentazione di carattere che è possibile visualizzare nei report o sul terminale. Viene visualizzato il valore -2,345.01.

+0

grazie Neal sulle informazioni sulla comp-3. – user392973

+0

@ user392973 @John Saunders. Sulla base del tuo commento a John Saunders, è possibile che il tipo di USAGE che il tuo cliente sta cercando non sia PACKED-DECIMAL ma DISPLAY (meglio chiarirlo con il tuo cliente). Se USAGE è DISPLAY, quindi basta allocare una stringa da 8 byte e formattare il numero come indicato nella risposta che John ti ha dato. Se l'ambiente di destinazione è un mainframe IBM, il prossimo bit da osservare sono i problemi della code page tra i set di caratteri EBCDIC/ASCII. – NealB

+0

Se queste persone vogliono un servizio Web per inviarli PACKED-DECIMAL o EBCDIC, devono svegliarsi e annusare il decennio. –

2

S in cobol è la definizione di un campo numerico con segno (cioè può essere positivo o negativo). Quindi, ad esempio, S999 è un numerico numerico (binario) con segno. Il problema è S presumibile, e nella maggior parte dei compilatori cobol, il modo in cui il segno è marcato consiste nel "sovrascrivere" l'ultimo carattere con un altro carattere per indicare più o meno. Ciò risulta, se si guarda il campo in un browser ascii, si avrà uno strano carattere. Vale a dire. MINUS 500 assomiglierebbe a questo 50C o 50} a seconda del personaggio sottostante e se fosse un + o - che aveva sovraffollato.

+1

Perché ritieni che S999 sia "binario"? Non è necessario. S è "implicito", non "assunto". I campi VISUALIZZAZIONE DI UTILIZZO sono "overpunched", packed-decimal/comp-3 o binary/comp/comp-4/comp-5 non sono, in quanto non sarebbero "punzonati" in primo luogo. "50C" sarebbe positivo 503, "50}" è -500. Se si trattasse di un "+" che era stato sovraffollato, sarebbe un numero positivo. –

Problemi correlati