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