Por que o ponto (ou vírgula) decimal não aparece?
Uma dúvida comum para quem está começando a programar em Cobol e ainda se confunde com os conceitos de ponto decimal implícito e ponto decimal explícito.
Você quer exibir na tela ou num relatório uma variável numérica com casas decimais e codificar um programa como esse:
identification division.
program-id. gtc001.
data division.
working-storage section.
01 item-de-grupo.
03 item-elementar pic 9(003)v9(002) value 123.45.
procedure division.
inicio.
display item-elementar
stop run.
…e o que aparece na tela é algo como…
[~/cbl]$ ../bin/gtc001
12334
O ponto não aparece porque a picture 9(003)v9(002) indica que o campo possui um ponto decimal implícito após a terceira posicional. Na prática esse ponto não existe fisicamente.
Para que ele “exista” e seja exibido, há duas soluções possíveis:
- Transformar a variável de numérica em numérica editada
identification division.
program-id. gtc001.
data division.
working-storage section.
01 item-de-grupo.
03 item-elementar pic zz9.99 value 123.45.
procedure division.
inicio.
display item-elementar
stop run.
Nesse caso, pic zz9.99 é uma variável numérica editada; o ponto decimal existe fisicamente e será exibido pelo programa:
[~/cbl]$ ../bin/gtc001
123.34
O incoveniente dessa solução é que variáveis numéricas editadas não podem ser usadas em operações aritméticas. Num programa real, onde a variável item-elementar tivesse que passar por cálculos ou coisas assim, teríamos que partir para uma segunda solução.
2) Copiar o conteúdo da variável original para uma variável numérica editada antes da exibição
identification division.
program-id. gtc001.
data division.
working-storage section.
01 item-de-grupo-1.
03 item-elementar-1 pic 9(003)v9(002) value 123.45.
01 item-de-grupo-2.
03 item-elementar-2 pic zz9.99 value zeros.
procedure division.
inicio.
move item-elementar-1 to item-elementar-2
display item-elementar-2
stop run.
Que também exibiria…
[~/cbl]$ ../bin/gtc001
123.34
