none
Calculo de valores arredondando incorretamente X++ RRS feed

  • 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

    terça-feira, 14 de maio de 2013 22:31

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 -

    quarta-feira, 15 de maio de 2013 14:52
  • 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

    quarta-feira, 15 de maio de 2013 16:39
  • Vce lode me dar um exemplo pratico, demonstrando numa bom os valores de custos das materias primas?

    Software Development Engineer - Global Finance Management Team - www.daxdev.com.br -

    quarta-feira, 15 de maio de 2013 21:36
  • 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
    terça-feira, 21 de maio de 2013 13:44