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ímbolo | Significado | Exemplo de PIC | Valor | Resultado |
|---|---|---|---|---|
9 | Dígito numérico | 9(05) | 1234 | 01234 |
Z | Dígito — suprime zero à esq. | Z(05) | 1234 | 1234 |
* | Dígito — preenche zero com * | *(05) | 1234 | *1234 |
. | Ponto decimal (exibição) | ZZZ.99 | 12.34 | 12.34 |
, | Separador de milhar | Z,ZZZ.99 | 1234.56 | 1,234.56 |
+ | Sinal sempre visível | +ZZZ.99 | -12.34 | - 12.34 |
- | Sinal só se negativo | -ZZZ.99 | 12.34 | 12.34 |
CR | CR se negativo | ZZZ.99CR | -5.00 | 5.00CR |
DB | DB se negativo | ZZZ.99DB | -5.00 | 5.00DB |
$ | Símbolo de moeda | $ZZZ.99 | 12.34 | $ 12.34 |
B | Insere espaço | 99B99B99 | 150615 | 15 06 15 |
/ | Insere barra | 99/99/9999 | 15062026 | 15/06/2026 |
0 | Insere zero literal | 9(5)0 | 1234 | 012340 |
🦕 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
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
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
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
* 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.