1. Símbolos de edição numérica

Campos de edição numérica são declarados com símbolos especiais no PIC e servem apenas para exibição — você não pode fazer aritmética com eles. O MOVE de um campo numérico para um campo editado aplica automaticamente a formatação:

SímboloSignificadoExemplo de PICValorResultado
9Dígito numérico9(05)123401234
ZDígito — suprime zero à esq.Z(05)1234 1234
*Dígito — preenche zero com **(05)1234*1234
.Ponto decimal (exibição)ZZZ.9912.34 12.34
,Separador de milharZ,ZZZ.991234.561,234.56
+Sinal sempre visível+ZZZ.99-12.34- 12.34
-Sinal só se negativo-ZZZ.9912.34 12.34
CRCR se negativoZZZ.99CR-5.00 5.00CR
DBDB se negativoZZZ.99DB-5.00 5.00DB
$Símbolo de moeda$ZZZ.9912.34$ 12.34
BInsere espaço99B99B9915061515 06 15
/Insere barra99/99/99991506202615/06/2026
0Insere zero literal9(5)01234012340

🦕 Analogia — campo editado é como uma máscara de impressão

Pense nos símbolos de edição como uma máscara que você coloca sobre o número na hora de imprimir. Z,ZZZ.99 diz: "exibe 4 dígitos com separador de milhar e 2 casas decimais, suprimindo zeros à esquerda". O número original fica intacto em outro campo; o editado guarda apenas a aparência.

2. Campos editados na prática

COBOL Declarações de campos editados comuns em sistemas bancários
       WORKING-STORAGE SECTION.

             * Valor monetário — R$ com separador de milhar e centavos
       01  WS-VALOR-ED    Z.ZZZ.ZZZ.ZZ9,99.
             *  1234567.89 → '  1.234.567,89'  (vírgula como decimal)
             *      100.00 → '        100,00'

             * Valor com sinal para débitos/créditos
       01  WS-VALOR-SINAL  -Z.ZZZ.ZZ9,99.
             *  1500.00 → '    1.500,00'
             * -1500.00 → '-   1.500,00'

             * Valor com símbolo de moeda flutuante
       01  WS-MOEDA-ED     $$$,$$$,$$9.99.
             *  1234.56 → '  $1,234.56'
             *     5.00 → '      $5.00'

             * Data formatada com barras
       01  WS-DATA-EDT     99/99/9999.
             *  15062026 → '15/06/2026'

             * Data com traços
       01  WS-DATA-ISO-ED  9999-99-99.
             *  20260615 → '2026-06-15'

             * Número de conta com espaço
       01  WS-CONTA-ED     9999B99999-9.
             *  000112345678 → '0001 12345678-0' (agência+conta+dígito)

             * CPF formatado
       01  WS-CPF-ED       999.999.999-99.
             *  12345678901 → '123.456.789-01'

             * Percentual
       01  WS-PERC-ED      ZZ9,9999%.
             *  1.2500 → '  1,2500%'

             * Proteção contra alteração (cheque)
       01  WS-CHEQUE-ED    *,***,**9.99.
             *  1234.56 → '**1,234.56'

3. MOVE para campo editado

COBOL MOVE de numérico para campo editado
       WORKING-STORAGE SECTION.
       01  WS-SALDO          PIC S9(11)V99.
       01  WS-SALDO-ED       PIC -Z.ZZZ.ZZZ.ZZ9,99.

       01  WS-DATA-NUM       PIC 9(08).
       01  WS-DATA-ED        PIC 99/99/9999.

       01  WS-CPF-NUM        PIC 9(11).
       01  WS-CPF-ED         PIC 999.999.999-99.

       PROCEDURE DIVISION.
             * Formatando saldo para exibição
           MOVE -1234567.89 TO WS-SALDO
           MOVE WS-SALDO   TO WS-SALDO-ED
             * WS-SALDO-ED = '-  1.234.567,89'

             * Formatando data
           MOVE 15062026    TO WS-DATA-NUM
           MOVE WS-DATA-NUM TO WS-DATA-ED
             * WS-DATA-ED = '15/06/2026'

             * Formatando CPF
           MOVE 12345678901  TO WS-CPF-NUM
           MOVE WS-CPF-NUM  TO WS-CPF-ED
             * WS-CPF-ED = '123.456.789-01'

             * Montando linha de extrato
           STRING
               WS-DATA-ED  DELIMITED SIZE
               '  '        DELIMITED SIZE
               WS-SALDO-ED DELIMITED SIZE
           INTO WS-LINHA-EXTRATO
           END-STRING

             * ATENÇÃO: campo editado não pode ser usado em aritmética
           ADD WS-SALDO-ED TO WS-TOTAL   *ERRO de compilação!
             * Use sempre o campo numérico (WS-SALDO) para calcular

⚠️ Campo editado é somente para exibição

Um campo com PIC Z,ZZZ.99 ou 99/99/9999 não pode ser usado em operações aritméticas — o compilador rejeita. Mantenha sempre dois campos separados: o numérico para calcular (PIC S9(11)V99) e o editado para exibir (PIC -Z.ZZZ.ZZZ,99). Faça o MOVE do numérico para o editado somente na hora de gravar no relatório ou montar a linha de saída.

4. Erros comuns

1. Usar campo editado em cálculo

COBOL Campo editado não pode participar de aritmética
       01  WS-VALOR-ED    Z,ZZZ.99.     *campo editado
       01  WS-TOTAL       S9(09)V99.    *campo numérico

             * ERRADO: compilador rejeita
           ADD WS-VALOR-ED TO WS-TOTAL

             * CORRETO: use sempre o campo numérico fonte
           ADD WS-VALOR    TO WS-TOTAL    *WS-VALOR é PIC S9(07)V99
           MOVE WS-TOTAL   TO WS-VALOR-ED *só na hora de exibir

2. Confundir ponto e vírgula como separadores

COBOL No COBOL padrão: ponto = decimal, vírgula = milhar
             * No COBOL padrão: ponto é decimal, vírgula é milhar
       01  WS-VALOR-PONTO   Z,ZZZ.99.    *saída: 1,234.56

             * Para exibição brasileira (vírgula como decimal),
             * muitos times montam o campo via STRING em vez de PIC:
       01  WS-SALDO         S9(09)V99.
       01  WS-INTEIRO-ED    Z.ZZZ.ZZZ.ZZ9.
       01  WS-CENT-ED       99.
       01  WS-SAIDA         X(20).

             *  Monta manualmente '1.234,56'
           MOVE WS-SALDO(1:9) TO WS-INTEIRO-ED
           MOVE WS-SALDO(10:2) TO WS-CENT-ED
           STRING
               WS-INTEIRO-ED DELIMITED SIZE
               ','           DELIMITED SIZE
               WS-CENT-ED    DELIMITED SIZE
           INTO WS-SAIDA
           END-STRING

🟣 Para quem já programa — PICTURE com vírgula como decimal

Em sistemas brasileiros, é comum usar vírgula como separador decimal na exibição (Z.ZZZ,99). No COBOL padrão, a vírgula no PIC é separador de milhar e o ponto é decimal. Para usar vírgula como decimal na exibição, muitos times adotam campos alfanuméricos formatados via STRING — montam '1.234,56' manualmente em vez de depender do campo editado. Isso evita confusão entre o PIC do compilador e o formato esperado pelo usuário final.