Problemas em cálculo matemático
Caros colegas,
Tenho um frente de caixa onde o cliente digita os produtos e ao final da venda pode informar descontos por ¬ ou valor (básico). O desconto final eu gravo em valor e em ¬ no banco de dados.
Tenho um relatório que lista os produtos vendidos em um período e estou aplicando no produto a ¬ de desconto que foi concedida na venda. Ocorre que estão ocorrendo diferenças de cálculo, tendo em vista que às vezes a ¬ de desconto seria um número com muitas casas decimais.
Exemplo: R$ 870,00 com desconto de R$ 26,00. Calculando a ¬ seria 0,02988505747.
Pergunto: A solução seria armazenar um número com 10 ou 12 casas decimais, para ter precisão no cálculo dos descontos de cada item da venda? Ou existe uma outra maneira que eu não estou visualizando ?
Agradeço a colaboração,
Marcello
Tenho um frente de caixa onde o cliente digita os produtos e ao final da venda pode informar descontos por ¬ ou valor (básico). O desconto final eu gravo em valor e em ¬ no banco de dados.
Tenho um relatório que lista os produtos vendidos em um período e estou aplicando no produto a ¬ de desconto que foi concedida na venda. Ocorre que estão ocorrendo diferenças de cálculo, tendo em vista que às vezes a ¬ de desconto seria um número com muitas casas decimais.
Exemplo: R$ 870,00 com desconto de R$ 26,00. Calculando a ¬ seria 0,02988505747.
Pergunto: A solução seria armazenar um número com 10 ou 12 casas decimais, para ter precisão no cálculo dos descontos de cada item da venda? Ou existe uma outra maneira que eu não estou visualizando ?
Agradeço a colaboração,
Marcello
Marcello
Curtidas 0
Respostas
Marco Salles
24/07/2006
A solução seria armazenar um número com 10 ou 12 casas decimais, para ter precisão no cálculo dos descontos [b:a9953f08a6]de cada item da venda?[/b:a9953f08a6]
Marcelo , se todos os descontos forem iguais , não ha diferença entre aplicar Valor do desconto em cada item da Venda ou no total das venda
Matematicamente não existe diferença , Mas como computador trabalha com arredondamentos internos , o mais correto serai aplicar o Desconto no Final da Venda...
Voce diz que ha diferença de calculo .. Que diferença seria esta ???
Não ficou claro se o erro esta no Relatorio , no total desse relatorio , ou se o erro esta em cada venda ?? Sua duvida para mim esta meio no ar
GOSTEI 0
Marcello
24/07/2006
:oops: Vou tentar explicar melhor:
O Relatório é de vendas por produto dentro de um período - um mês por exemplo. Eu pego cada produto e apuro quantos foram vendidos, por quanto foi vendido, quanto custou, e se houve desconto apresento o valor que foi dado de desconto no produto.
Então uma venda pode ter n itens, e o desconto realmente é dado no final e eu quero guardar a porcentagem de desconto que foi dada na venda, pois como o colega disse ´se todos os descontos forem iguais , não ha diferença entre aplicar Valor do desconto em cada item da Venda ou no total das venda´.
O erro esta no relatório, pois eu pego o valor do produto na época da venda e aplico a porcentagem de desconto que gravei, só que estou guardando a porcentagem com 3 casas decimais, então da diferença de centavos se comparar o relatório com a venda
Exemplo: Venda - R$ 870 com R$ 26 de desconto = R$ 844
Relatório: R$ 870 * 0,029 da R$ 25,23 de desconto = R$ 844,77
Considerando que este exemplo é com apenas 1 item.
Se eu fizer R$ 870 * 0,02988505747, aí sim da os R$ 844.
O que fazer ? Gravo todos estes numeros após a virgula ?
O Relatório é de vendas por produto dentro de um período - um mês por exemplo. Eu pego cada produto e apuro quantos foram vendidos, por quanto foi vendido, quanto custou, e se houve desconto apresento o valor que foi dado de desconto no produto.
Então uma venda pode ter n itens, e o desconto realmente é dado no final e eu quero guardar a porcentagem de desconto que foi dada na venda, pois como o colega disse ´se todos os descontos forem iguais , não ha diferença entre aplicar Valor do desconto em cada item da Venda ou no total das venda´.
O erro esta no relatório, pois eu pego o valor do produto na época da venda e aplico a porcentagem de desconto que gravei, só que estou guardando a porcentagem com 3 casas decimais, então da diferença de centavos se comparar o relatório com a venda
Exemplo: Venda - R$ 870 com R$ 26 de desconto = R$ 844
Relatório: R$ 870 * 0,029 da R$ 25,23 de desconto = R$ 844,77
Considerando que este exemplo é com apenas 1 item.
Se eu fizer R$ 870 * 0,02988505747, aí sim da os R$ 844.
O que fazer ? Gravo todos estes numeros após a virgula ?
GOSTEI 0
Marco Salles
24/07/2006
so mudando alguma coia de lugar.....
porque voce não pega assim:
[b:f1396800d8]pego o valor do produto na época da venda e diminuo do valor do Desconto que gravei,[/b:f1396800d8]
Teria algum problema :?: :?:
Outra , esta é so uma opinião. Acho melhor trabalhar com valores porcentuais do que com valores decimais
2,988505.....é o valor percentual
0,029885..... é o valor decimal
A Grande diferença que se armazena mais digitos usando a mesma reperesentação.. Geralmente a precisão no primeiro caso é melhor
Assim:
(Valor*2,988505.....)/100 --->>resulta em algo mais preciso do que
(valor*0,029885.....)
muitas das vezes se usa esta tecnica para arredondar un numero...
O erro esta no relatório, pois eu pego o valor do produto na época da venda e aplico a porcentagem de desconto que gravei,
porque voce não pega assim:
[b:f1396800d8]pego o valor do produto na época da venda e diminuo do valor do Desconto que gravei,[/b:f1396800d8]
Teria algum problema :?: :?:
Outra , esta é so uma opinião. Acho melhor trabalhar com valores porcentuais do que com valores decimais
2,988505.....é o valor percentual
0,029885..... é o valor decimal
A Grande diferença que se armazena mais digitos usando a mesma reperesentação.. Geralmente a precisão no primeiro caso é melhor
Assim:
(Valor*2,988505.....)/100 --->>resulta em algo mais preciso do que
(valor*0,029885.....)
muitas das vezes se usa esta tecnica para arredondar un numero...
GOSTEI 0
Marcello
24/07/2006
pego o valor do produto na época da venda e diminuo do valor do Desconto que gravei,
Não posso fazer assim pois o desconto é informado sobre o total da venda, que pode ter vários produtos.
Outra , esta é so uma opinião. Acho melhor trabalhar com valores porcentuais do que com valores decimais
2,988505.....é o valor percentual
0,029885..... é o valor decimal
Muito boa idéia, vou aplicar.
Vc armazenaria então a porcentagem com mais casas decimais para resolver este problema ?
GOSTEI 0
Marco Salles
24/07/2006
olhando de fora , eu acho que voce pode usar 4 casas decimais ou mesmo ate as tres que voce inicialmente esta usando , desde que voce aplique , uma função de arredondamento no Valor Do Desconto que saira no Relatório...
Por exemplo
Por exemplo
var X: Double; //valor de desconto que saira no relatorio X:=(870*2,988)/100; // arredonda o valor em duas casas decimais X := 0.01 * Round(100 * X);
GOSTEI 0
Marcello
24/07/2006
Marcos,
Fiz conforme seu último post e aparentemente deu certinho.
Obrigado!!! :D
Marcello.
Fiz conforme seu último post e aparentemente deu certinho.
Obrigado!!! :D
Marcello.
GOSTEI 0
Marco Salles
24/07/2006
Bom...
GOSTEI 0