Arredondamento com diferença de 1 centavo
Bom dia.
Estou usando o FormatFloat para deixar um número com duas casas decimais, pois é um valor em real.
Estou fazendo da seguinte forma:
Um caso que está dando o erro é onde o CalculoValor (que é uma variável do tipo real) está com o valor 77,085. Depois de passar pelo FormatFloat, o ValorTotal fica como 77,09.
O problema é que eu faço esse mesmo cálculo em dois relatórios diferentes, mas que recebem os mesmos valores. Em um relatório o ValorTotal fica como 77,09 e no outro fica 77,08, mesmo que o CalculoValor esteja com o valor 77,085 nos dois casos.
O que pode estar acontecendo?
Estou usando o FormatFloat para deixar um número com duas casas decimais, pois é um valor em real.
Estou fazendo da seguinte forma:
ValorTotal := strToFloat(FormatFloat('###0.00', CalculoValor))
Um caso que está dando o erro é onde o CalculoValor (que é uma variável do tipo real) está com o valor 77,085. Depois de passar pelo FormatFloat, o ValorTotal fica como 77,09.
O problema é que eu faço esse mesmo cálculo em dois relatórios diferentes, mas que recebem os mesmos valores. Em um relatório o ValorTotal fica como 77,09 e no outro fica 77,08, mesmo que o CalculoValor esteja com o valor 77,085 nos dois casos.
O que pode estar acontecendo?
Natalia
Curtidas 0
Respostas
Jones Granatyr
29/03/2017
Olá! Talvez possa ser algum problema com a função de arredondamento. Chegou a dar uma olhada nesse artigo abaixo?
[url]https://www.devmedia.com.br/rotinas-de-arredondamento-round-roundto-simpleroundto-setroundmode-e-getroundmode/21114[/url]
[url]https://www.devmedia.com.br/rotinas-de-arredondamento-round-roundto-simpleroundto-setroundmode-e-getroundmode/21114[/url]
GOSTEI 0
Daniel Araújo
29/03/2017
Boa tarde Natalia!
Você está fazendo a formatação da mesma forma nos dois cantos?
Pode postar os dois trechos de código para que eu possa analisar?
Daniel Araújo
Sombra Tecnologia
Consultoria e Desenvolvimento de Sistemas
sombra.tecnologia@gmail.com
55 85 98135-5516
Você está fazendo a formatação da mesma forma nos dois cantos?
Pode postar os dois trechos de código para que eu possa analisar?
Daniel Araújo
Sombra Tecnologia
Consultoria e Desenvolvimento de Sistemas
sombra.tecnologia@gmail.com
55 85 98135-5516
GOSTEI 0
Raylan Zibel
29/03/2017
Tente usar Currency, em vez de Double.
GOSTEI 0
Natalia
29/03/2017
Consegui resolver. Essas variáveis que uso no código estavam com o tipo Real. Alterei elas para o tipo Extended e os resultados dos arredondamentos ficaram corretos.
GOSTEI 0
Raylan Zibel
29/03/2017
Tente usar Currency, em vez de Double.
Consegui resolver. Essas variáveis que uso no código estavam com o tipo Real. Alterei elas para o tipo Extended e os resultados dos arredondamentos ficaram corretos.
Eu sabia que tinha algo assim rs. Só errei os tipos =D
GOSTEI 0