AS / 400: Usando a função COMPUTE, resultados inconsistentes com diferentes definições de campo
Eu enfrentei um problema misterioso ao usar a função COMPUTE no AS / 400.
O cenário é o seguinte:
01 WSAA-AMOUNT-A PIC S9(15)V9(02) COMP-3.
01 WSAA-AMOUNT-B-01 PIC S9(16)V9(02) VALUE 0.
01 WSAA-AMOUNT-B-02 PIC S9(13)V9(05) VALUE 0.
01 WSAA-AMOUNT-C PIC S9(16)V9(02) VALUE 0.
01 WSAA-RESULT PIC S9(15)V9(02) VALUE 0.
MOVE 2500.87 TO WSAA-AMOUNT-A.
MOVE 12285 TO WSAA-AMOUNT-B-01.
MOVE 12285 TO WSAA-AMOUNT-B-02.
MOVE 4387.5 TO WSAA-AMOUNT-C.
COMPUTE WSAA-RESULT ROUNDED = (WSAA-AMOUNT-A / ( WSAA-AMOUNT-B-01 + WSAA-AMOUNT-C) * 100 ).
DISPLAY WSAA-RESULT.
COMPUTE WSAA-RESULT ROUNDED = (WSAA-AMOUNT-A / ( WSAA-AMOUNT-B-02 + WSAA-AMOUNT-C) * 100 ).
DISPLAY WSAA-RESULT.
Os resultados me surpreenderam que o resultado da primeira fórmula = 14,90 enquanto o segundo se tornou = 15
Parece que o mais tarde é mais lógico como 2500.87 / (12285 + 4387.5) * 100 = 14.99997001. Espero que o resultado do primeiro resultado também seja 15 após o arredondamento.
Alguém sabe qual é a causa raiz desses resultados inconsistentes?