Oi Ronnei, Daniel e amigos do Fórum.
As bibliotecas matemáticas linguagens de programação adotam o método de arredondamento onde: se o final for 5 ou maior incrementa-se 1 no valor do dígito a esquerda ou se o final for menor igual ou menor que 4 "nada" é incrementado ao dígito da esquerda. Este método é o mais usado em cálculos de estatística (segundo um professor de estatística da faculdade).
Eu adotei o valor 0.004 ou invés de 0.001 apenas para padronizar o arredondamento para cima, isto é, se há valor maior que ZERO no dígito da direita, seja ele igual ou menor a 5, ele sempre será arredondado, incrementando 1 ao valor do dígito da esquerda.
O motivo de eu ter adotado o valor 0.0004 (para cálculos com 4 dígitos decimais) foi a emissão de notas fiscais.
São "trocentos" cálculos envolvendo valores de produtos, impostos e descontos que na maioria das vezes havia um erro de 0,01 centavo ao se fazer o cálculo na calculadora. As calculadoras trabalham com um número maior de casas decimais, daí o problema.
No VB, se você não atentar para isto, não terá sucesso no arredondamento dos valores.
Exemplo para cálculo com 3 dígitos decimais:
valor 1.570 - último dígito é menor que 5 então ficará: 1.570 + 0.004 = 1.574 - não será arredondado.
valor 1.571 - último dígito é menor que 5 então ficará: 1.571 +
0.001= 1.572 - não será arredondado.
valor 1.571 - último dígito é menor que 5 então ficará: 1.571 +
0.004= 1.575 - será arredondado para cima.
valor 1.574 - último dígito é menor que 5 então ficará: 1.574 + 0.004 = 1.578 - será arredondado para cima.
valor 1.579 - último dígito é maior que 5 então ficará: 1.579 + 0.004 =
1.583 - não será arredondado mas já houve o incremento de 1 no dígito da esquerda.
O valor 1.574 retornará
1.57 se for usado uma máscara ou se for truncado (sem arredondamento).
O valor 1.583 retornará
1.58 se for usado uma máscara ou se for truncado (sem arredondamento).
Os valores 1.575 e 1.578 serão arredondados para
1.58 se for usado uma máscara ou se forem truncados.
Resultado com e sem a adição do valor 0.004:
Sem a adição de 0.004: 1.574 se truncado por uma mascará (ex: R$ ######0.00) retornará R$ 1.57
Com a adição de 0.004: 1.574+0.004=1.578, se truncado por uma mascará (ex: R$ ###.##0,00) retornará R$ 1,58.
Na minha AC, desde o início eu adotei um modo "bizarro" de driblar o arredondamento devido as ECFs.
- Faço todos os cálculos utilizando 4 dígitos decimais e adicionando o valor 0.0004 ao resultado.
- Converto o valor para uma string no seguinte formato "########0.0000".
- Pego este sguimento da string: "########0.00", desprezando os 2 últimos dígitos.
- Converto o conteúdo da string para uma variável numércia e pronto, o arredondamento fica preciso.
- Posso utilizar tanto a variável string ou a variável numérica para enviar a qualquer dispositivo.
Criei funções para realizar este trabalho e as utilizo em todas as rotinas do sistema.
Se alguém não concordar com o valor 0.004 ou 0.0004 saiba que está
correto utilizar 0.001 ou 0.0001 sugerido pelo Daniel.
Apenas quis mostrar a vocês uma outra visão de arredondamento.