Na hora de imprimir está acontecendo um problema de arredondamento, o que pode ser?

Hoje vou mostrar o que pode ser quando aparece algum problema de arredondamentos em relatórios.

Quando precisamos criar algum relatório gráfico em AdvPL utilizando o FWMSPrinter, ao usar os métodos Say ou SayAlign para imprimir um texto, só podemos mandar conteúdo do tipo Caractere.

Se formos mandar conteúdo numérico, data, etc… Precisamos converter e adaptar esse texto para o tipo Caractere.

Então para o nosso exemplo, temos uma variável chamada nValor com o conteúdo de 1042.755, e queremos imprimir com duas casas decimais (sem arredondar) e transformando o valor para a representação brasileira (o resultado deve ficar “1.042,75”), o comando ficaria então:

oPrintPvt:SayAlign(nLinha, nColuna, AllTrim(Transform(nValor, "@E 99,999.99")), oFontUsada, nLargura, nAltura, , nAlinhamento, )

Mas ao ver o resultado, ele arredondou automaticamente, e deixou a impressão como “1.042,76”. O que será que houve? Pois bem jovens, a função Transform faz uma validação interna, e faz o arredondamento automático dos valores.

Então qualquer caso na regra matemática em que o arredondamento for possível, vai ser aplicado. Para resolver isso é muito simples, basta forçarmos o valor para não ser arredondando antes do Transform ser executado. Dessa forma, usamos a função NoRound e passamos apenas duas casas decimais, ficando assim:

oPrintPvt:SayAlign(nLinha, nColuna, AllTrim(Transform( NoRound(nValor), "@E 99,999.99")), oFontUsada, nLargura, nAltura, , nAlinhamento, )

Com isso, o valor a ser impresso será “1.042,75”.

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

Deixe uma resposta