Home

Linha Microsiga Protheus

Páginas filhas
  • Limite de cálculo numérico em ADVPL 16 -- 11168

Limite de cálculo numérico em ADVPL 16

As rotinas de operações matemáticas de soma e subtração no ADVPL16 possuem uma limitação de cálculo, fixada em 16 dígitos. Caso seja realizada uma operação de Soma e/ou multiplicação que resulte em um número com mais de 16 dígitos, ocorre uma violação de integridade do resultado, onde são preservados os 16 dígitos mais significativos do número, conforme demonstrado abaixo :

 

 


nNum1 := 21455516987
nNum2 := 5150213
nResult := nNum1 * nNum2
? nResult



Resultado mostrado -> 110500482508168200
Resultado correto -> 110500482508168231 (Diferença de 31 unidades)


Foi reportado por um cliente esta limitação de cálculo, pois para fazer o cálculo de um CheckSum para arquivo de Remessa / Retorno CNAB, a fórmula utilizada pelo banco envolvia cálculos de multiplicação e soma resultando números com mais de 17 dígitos inteiros ! Para solucionar este problema, foram criadas as funções SOMASTR e MULTSTR, para realizar soma e multiplicação com caracteres inteiros, de modo a transpor este limite. O mesmo fonte acima, escrito para a utilização da função MULTSTR, seria assim :

 


cNum1 := "21455516987"
cNum2 := "5150213"
cResult := MultStr(cNum1,cNum2)
? cResult // Resultado mostrado -> 110500482508168231 CORRETO


 

Nível 1 (Acesso Clientes)
Espanhol , Inglês
Versões Anteriores