Arredondamento em ABAP

segunda-feira, 10 de dezembro de 2012 0 comentários

Precisa arredondar um valor em um programa ABAP?
Então conheça Os Operadores Aritméticos ABAP:
Instrução
Descrição
FLOOR()
Arredonda para baixo.
CEIL()
Arredonda para cima.
FRAC()
Retorna decimais de um valor.

Sintaxe:


  DATA:
       v_valor_01(4TYPE p DECIMALS 2,
       v_valor_02(4TYPE p DECIMALS 2,
       v_valor_03(4TYPE p DECIMALS 2,
       v_valor_04(4TYPE p DECIMALS 2,
       v_valor_05(4TYPE p DECIMALS 2,
       v_valor_06(4TYPE p DECIMALS 2,
       v_floor1(4)   TYPE p DECIMALS 2,
       v_floor2(4)   TYPE p DECIMALS 2,
       v_ceil1(4)    TYPE p DECIMALS 2,
       v_ceil2(4)    TYPE p DECIMALS 2,
       v_frac1(4)    TYPE p DECIMALS 2,
       v_frac2(4)    TYPE p DECIMALS 2.

* Valores usandos para o FLOOR(Arredondamento para baixo)
v_valor_01 = '10.03'.
v_valor_02 = '10.06'.
* Valores usandos para o CEIL(Arredondamento para cima)
v_valor_03 = '10.03'.
v_valor_04 = '10.06'.
* Valores usandos para o FRAC(Retorna os decimais do valor)
v_valor_05 = '10.03'.
v_valor_06 = '10.06'.

*Logica do FLOOR(Arredondamento para baixo)
v_floor1 = floor( v_valor_01 ).
v_floor2 = floor( v_valor_02 ).

*Logica do CEIL(Arredondamento para cima)
v_ceil1  = ceil( v_valor_03 ).
v_ceil2  = ceil( v_valor_04 ).

*Logica do FRAC(Retorna os decimais do valor)
v_frac1  = frac( v_valor_05 ).
v_frac2  = frac( v_valor_06 ).
* Arredondamento para baixo com o FRAC.
v_frac1  = v_valor_05 - v_frac1.
* Arredondamento para cima com o FRAC.
v_frac2  = v_valor_06 - v_frac2 + 1.

WRITE:
         'Floor:',
       / v_floor1, ' (Arredondamento para baixo)',
       / v_floor2, ' (Arredondamento para baixo)',
       / 'CEIL:',
       / v_ceil1,  ' (Arredondamento para cima)',
       / v_ceil2,  ' (Arredondamento para cima)',
       / 'FRAC:',
       / v_frac1,  ' (Arredondamento para baixo)',
       / v_frac2,  ' (Arredondamento para cima)'.


Resultado:
 
O resultado mostra que não importa que os decimais são maiores ou menos que 0.5, o valor sempre será arredondado. =D

0 comentários:

Postar um comentário