Olá!
Ao trabalhar com variados cálculos há o momento que ocorre a necessidade de utilizar/manipular somente os valores que estão após a vírgula. Exemplo, verificar se o resultado de um cálculo vai gerar um número inteiro ou não, algo simples que pode ser feito de diversas formas.
E uma das maneiras de manipular esses valores, é realizar a definição de um item de grupo composto de duas variáveis, uma para armazenar valores inteiros e a outra para os valores após a vírgula. Ou seja, se o resultado de um cálculo está na variável:
77 RESULTADO-CALCULO PIC S9(005)V9(02) VALUE ZEROS.
Temos que realizar a definição de um item de grupo, conforme:
01 RESULTADO.
03 RESULTADO-CALC-PARTE-1 PIC S9(005) VALUE ZEROS.
03
RESULTADO-CALC-PARTE-2 PIC 9(002) VALUE ZEROS.
Assim, se o valor de RESULTADO-CALCULO = 123,45 for movimentado para RESULTADO, respectivamente o valor de cada parte é:
RESULTADO-CALC-PARTE-1 = 123
RESULTADO-CALC-PARTE-2 = 45
Ok, o valor após a vírgula está separado e pronto para ser manipulado, é até um processo bem simples. Entretanto, tendo o objetivo de trabalhar especificamente com os números após a vírgula, este processo de criar um item de grupo não é o melhor.
Pois, veja a quantidade de passos realizados para chegar até o ponto do valor separado.
- Criar uma variável para armazenar o valor
- Criar um item de grupo para separar o valor em duas partes
- Atribuir valor a variável
- Movimentar o valor da variável para o item de grupo
Como melhorar?
- PIC SV9(n)
A picture SV9(n) é exatamente para armazenar somente os números após a vírgula. Assim, valores decimais atribuídos a uma variável declarada com está definição terá o valor inteiro desprezado e considerado somente os números após a vírgula.
Exemplo:
77 RESULTADO-CALCULO PIC SV9(002) VALUE ZEROS.
*
*
* -- Divisao de 15 / 4 = 3,75
DIVIDE 15
BY 4
GIVING RESULTADO-CALCULO
END-DIVIDE
O valor da resposta da divisão acima é atribuído a variável RESULTADO-CALCULO, mas note que a declaração dessa variável é com SV9(002), deste modo é desprezado a parte inteira da resposta da divisão e somente guardado os valores após a vírgula, assim o valor final de RESULTADO-CALCULO = 75.
Para mais exemplos veja o código do programa a seguir:
(no final do post há o link para ver o código completo).
- Declaração das variáveis:
*
*----------------------------------------------------------------*
LOCAL-STORAGE SECTION.
*----------------------------------------------------------------*
*
* -- Armazenar o resultado da operacao matematica
77 RESULTADO PIC S9(004)V9(04) VALUE ZEROS.
*
* -- Item de grupo para separar o valor do resultado
01 TESTE.
03 TESTE-PARTE-1 PIC S9(004) VALUE ZEROS.
03 TESTE-PARTE-2 PIC S9(004) VALUE ZEROS.
*
* -- Armazenar somente os numeros apos a virgula
77 TESTE-SV9 PIC SV9(04) VALUE ZEROS.
- Comandos executados:
*
DISPLAY 'Valores iniciais das variáveis: '
DISPLAY 'RESULTADO.: ' RESULTADO
DISPLAY 'TESTE-SV9.: ' TESTE-SV9
DISPLAY '.'
*
* -- Divisao de 9 / 4 = 2,25
DIVIDE 9
BY 4
GIVING RESULTADO
END-DIVIDE
*
DISPLAY 'Resultado de 9 / 4 = ' RESULTADO
DISPLAY '.'
*
* -- Com item de grupo
MOVE RESULTADO TO TESTE
DISPLAY 'O resultado separado no item de grupo'
DISPLAY 'TESTE-PARTE-1.: ' TESTE-PARTE-1
DISPLAY 'TESTE-PARTE-2.: ' TESTE-PARTE-2
DISPLAY '.'.
*
* -- Somente os valores apos a virgula com SV9
MOVE RESULTADO TO TESTE-SV9
DISPLAY 'Os números após a vírgula: ' TESTE-SV9
DISPLAY '.'.
DISPLAY '.'.
*
* -- Divisao de 15 / 4 = 3,75
MOVE ZEROS TO TESTE-SV9
DIVIDE 15
BY 4
GIVING TESTE-SV9
END-DIVIDE
DISPLAY 'Os números após a vírgula de 15 / 4 = ' TESTE-SV9
DISPLAY '.'.
DISPLAY '.'.
- Resposta da execução do programa:
Resposta da execução do programa SV9(n) |
Observe que com a utilização dessa Picture temos que ser precisos quanto a relação de casas numéricas a serem trabalhadas. Pois, veja que os zeros estão sendo posicionados a direita, fazendo que valor 25 ou 75 dos exemplos fique na unidade de milhar.
Com a utilização da PIC SV9(n) e tendo objetivo de trabalhar especificamente com os números após a vírgula, foi necessário de somente dois passos:
- Criar uma variável com a picture SV9(n)
- Realizar a operação para atribuir valor a variável
Note, que mesmo sendo exemplos de complexidade simples foi reduzido pela metade a quantidade de passos para obter o valor após a vírgula separado em uma variável.
Para Ctrl + C do código acesse aqui.
Consultar a relação de Termos e Abreviaturas acesse aqui.
FELIPE BARBOSA FERREIRA
FELIPE BARBOSA FERREIRA
Até o próximo post!
Nenhum comentário:
Postar um comentário