Inquiridor
Calculo de valores arredondando incorretamente X++

Pergunta
-
Olá pessoal,
Tenho o seguinte código em X++:
Real r;
;
r = 0.259315 + 0.259315;
info(strFmt("%1",r));
//O resultado está dando: 0,52 porém fazendo este cálculo em uma calculadora por exemplo daria: 0,51863
Este é apenas um exemplo, mas na verdade tenho um relatório de custos que está dando diferenças importantes devido a complexidade de nossas BOM's. O problema é o arredondamento, preciso que todas as casas decimais sejam computadas corretamente, como posso resolver este problema?
Obrigado!
Gilson P. Freitas Analista de sistemas
Todas as Respostas
-
Você pode fornecer mais informações sobre qual funcionalidade o sistema esta funcionando de maneira inesperada?
Existem diversas maneiras de se trabalhar com valores menos que 1 centavo no sistema.
Software Development Engineer - Global Finance Management Team - www.daxdev.com.br -
-
Olá Rodrigo,
O problema está em um relatório de custo que analisa toda a BOM do item expandindo todas as sub BOM's, exibindo o custo de cada item e totalizando cada sub BOM até chegar na BOM principal.
O relatório faz vários cálculos para manipular os impostos e exibir os valores sem impostos e com impostos separados.
Mas enfim o fato é que ao listar o valor de cada item no relatório é apresentado com 6 casas decimais e se somarmos estes valores não bate com o total da BOM, e internamente ao depurar o código percebo que os cálculos estão sendo feitos com duas casas decimais, o que pode estar gerando a diferença.
Gilson P. Freitas Analista de sistemas
-
-
Gilson,
Cheque os tipos de dados estendidos dos campos que você está tentando atribuir estes valores.
Os EDTs devem ter a propriedade NoOfDecimals = 4. Se estiver auto, significa 2.
No exemplo que você deu, se fizer:
info(strFmt("%1", num2str(r, 0, 4, 2, 1)));
Vai visualizar o valor com 4 casas decimais.
Este tipo de ação é forçado, deve ser especificado no código, como em qualquer linguagem de programação.
Abraço.
Gustavo Bagno E. da Silva
- Sugerido como Resposta Andressa Silva segunda-feira, 24 de junho de 2013 19:02