import.css=/download/attachments/327912/newLayout.css |
ArredondamentoAbrangência
Quando utilizado o tipo numérico do AdvPL, pode haver diferença de arredondamento em algumas operações aritméticas. Isso ocorre devido ao armazenamento numérico do AdvPL ser baseado em ponto flutuante usado pelo Protheus. Estas diferenças inclusive, estão presentes no AdvPL, mesmo antes do surgimento do Protheus. A representação de um número em ponto flutuante na memória está sujeita a aproximação de valores. Mesmo um valor inteiro ou com apenas dois dígitos decimais, pode ser representada internamente por um número fracionário aproximado. Isto significa que, um número resultante de uma operação aritmética entre dois números pode gerar um valor aproximado em memória que é diferente da representação deste terceiro número. Estas diferenças normalmente são perceptíveis nas operações de comparação numérica. Para garantir o comportamento correto nas comparações, devemos utilizar uma das funções de ajuste de precisão decimal ( Round() e/ou NoRound() ), onde informamos o número e a quantidade de casas decimais de ajuste para este número. Enquanto a função Round() arredonda o número caso a próxima casa decimal posterior a informada seja igual ou maior que 5, a função NoRound() "corta" o número sem arredondar. Por exemplo, Round(3.1415,3) = 3.142 e NoRound(3.1415,3) = 3.141 Exemplos: Ao invés de ...... If (nValor/30) >= 0.01 Explicação: |