problema com média ponderada
olá pessoal,
alguém utiliza média ponderada em algum sistema? tem hora q o cálculo apresenta um valores ´complicados´ mas o cálculo matemático esta correto, por exemplo na imagem...
[url=http://www.mh2img.net][img:79ba0b1b42]http://img00.mh2img.net/14MediaPond.JPG[/img:79ba0b1b42][/url]
alguém tem alguma sugestão, idéia de como resolver isso da melhor maneira possível?
alguém utiliza média ponderada em algum sistema? tem hora q o cálculo apresenta um valores ´complicados´ mas o cálculo matemático esta correto, por exemplo na imagem...
[url=http://www.mh2img.net][img:79ba0b1b42]http://img00.mh2img.net/14MediaPond.JPG[/img:79ba0b1b42][/url]
alguém tem alguma sugestão, idéia de como resolver isso da melhor maneira possível?
Gilberto Fernandes
Curtidas 0
Respostas
Marco Salles
18/12/2006
mas o cálculo matemático esta correto, por exemplo na imagem...
[b:fe4aba99f2]o calculo esta correto.. com exceção de problemas de arredondamento, mas isto ja não faz parte da matamética e sim da informatica[/b:fe4aba99f2]
alguém tem alguma sugestão, idéia de como resolver isso da melhor maneira possível?
resolver o que ???
GOSTEI 0
Gilberto Fernandes
18/12/2006
a quantidade final esta zero, mas o valor em estoque do produto esta -0,10, esse é o problema!
e apesar de na imagem esta aparecendo apenas duas casas de centavos os calculos foram realizados com seis casa
e apesar de na imagem esta aparecendo apenas duas casas de centavos os calculos foram realizados com seis casa
GOSTEI 0
Marco Salles
18/12/2006
para resolver o problema , e esquecer dos arredonamentos , voce deve dividir o problema em duas etapas...
1)
[b:409461d4f9]No caso de entrada de mercadoria[/b:409461d4f9]
Para calcular o preço medio < ai que entra a media ponderada no calculo > voce faz assim
e
No seu exemplo , voce tem
Quant1=2000 ValorUnitario1 = 0,51 ... ai entrou
Quant2 = 1000 e ValorUnitario2 = 0,08
Logo faça:
ValorUnitario=2000*0,52+1000*0,08/(2000+1000)
ValorUnitario=0,36666 e finalmente
Valor=0,3666*3000 = 1099,99
[b:409461d4f9]Observe que o seu valorUnitario esta nesse momento[color=red:409461d4f9] 0,37 [/color:409461d4f9], quando o correto seria [color=red:409461d4f9]0,3666[/color:409461d4f9] e o seu valor quando entrou 1000 a um preco de 0,08 esta [color=red:409461d4f9]1096,40[/color:409461d4f9], quando o correto seria [color=red:409461d4f9]1099,99[/color:409461d4f9][/b:409461d4f9]
[b:409461d4f9]2)No caso de saida[/b:409461d4f9]
Mas independentemente desse arredondamentos , no caso de [b:409461d4f9]saida[/b:409461d4f9] voce deve calcular o valor , multiplicando a quantidade pelo Valor_Unitario...
No final , voce tera um saldo de zero e um valor_Unitario=0,3666 , porem o seu valor será zero
1)
[b:409461d4f9]No caso de entrada de mercadoria[/b:409461d4f9]
Para calcular o preço medio < ai que entra a media ponderada no calculo > voce faz assim
ValorUnitario = Quant1*ValorUnitario1 +
Quant2*ValorUnitario2
/(Quantidade1+Quant2)
e
Valor=(QuantidadeTotal*ValorUnitario)
No seu exemplo , voce tem
Quant1=2000 ValorUnitario1 = 0,51 ... ai entrou
Quant2 = 1000 e ValorUnitario2 = 0,08
Logo faça:
ValorUnitario=2000*0,52+1000*0,08/(2000+1000)
ValorUnitario=0,36666 e finalmente
Valor=0,3666*3000 = 1099,99
[b:409461d4f9]Observe que o seu valorUnitario esta nesse momento[color=red:409461d4f9] 0,37 [/color:409461d4f9], quando o correto seria [color=red:409461d4f9]0,3666[/color:409461d4f9] e o seu valor quando entrou 1000 a um preco de 0,08 esta [color=red:409461d4f9]1096,40[/color:409461d4f9], quando o correto seria [color=red:409461d4f9]1099,99[/color:409461d4f9][/b:409461d4f9]
[b:409461d4f9]2)No caso de saida[/b:409461d4f9]
Mas independentemente desse arredondamentos , no caso de [b:409461d4f9]saida[/b:409461d4f9] voce deve calcular o valor , multiplicando a quantidade pelo Valor_Unitario...
No final , voce tera um saldo de zero e um valor_Unitario=0,3666 , porem o seu valor será zero
GOSTEI 0
Gilberto Fernandes
18/12/2006
Marco, apesar do relatório esta aparecendo somente duas casas decimais esta calculando com 4 casas...
então no ponto q vc citou eu tenho 2000 a 0,51 = 1020,00, entrou mais 1000 a 0,07640 = 76,40, dando um total qtde = 3000 e valor = 1096,40
o valor calculado para a proxima saída é [color=red:60e07771f8]1096,40/3000 = 0,3655[/color:60e07771f8]
esse é o valor q esta calculando nas saídas posteriores
150 * 0,3655 = 54,825
2000 * 0,3655 = 731,00
850 * 0,3655 = 310,675
a soma das saídas da 1096,50 - 1096,40 = -0,10
o problema esta q eu achando o valor de 0,3655 depois da entrada, o arredondamento dessa dizima q da o problema pq [color=red:60e07771f8]1096,40 / 3000 = 0,3655[/color:60e07771f8], porém [color=red:60e07771f8]0,3655 * 3000 = 1096,50[/color:60e07771f8]
então no ponto q vc citou eu tenho 2000 a 0,51 = 1020,00, entrou mais 1000 a 0,07640 = 76,40, dando um total qtde = 3000 e valor = 1096,40
o valor calculado para a proxima saída é [color=red:60e07771f8]1096,40/3000 = 0,3655[/color:60e07771f8]
esse é o valor q esta calculando nas saídas posteriores
150 * 0,3655 = 54,825
2000 * 0,3655 = 731,00
850 * 0,3655 = 310,675
a soma das saídas da 1096,50 - 1096,40 = -0,10
o problema esta q eu achando o valor de 0,3655 depois da entrada, o arredondamento dessa dizima q da o problema pq [color=red:60e07771f8]1096,40 / 3000 = 0,3655[/color:60e07771f8], porém [color=red:60e07771f8]0,3655 * 3000 = 1096,50[/color:60e07771f8]
GOSTEI 0
Marco Salles
18/12/2006
então no ponto q vc citou eu tenho 2000 a 0,51 = 1020,00, entrou mais 1000 a 0,07640 = 76,40, dando um total qtde = 3000 e valor = 1096,40
o valor calculado para a proxima saída é 1096,40/3000 = 0,3655
[b:68f3611777]eita..........[/b:68f3611777]
isto não é media ponderada amigo
GOSTEI 0
Gilberto Fernandes
18/12/2006
não entendi, só demonstrei o calculo do jeito q vc fez, explicando q apesar de demonstrar 2 casas decimais o calculo esta sendo feito com 4 casas...
o q não é média ponderada???
o q não é média ponderada???
GOSTEI 0
Massuda
18/12/2006
Esse problema ocorre por causa do arredondamento forçado que você está usando (´o calculo esta sendo feito com 4 casas...´). Por exemplo, este código dá ´errado´:Se usar Double ao invés de Currency o cálculo fica OK.
O problema não é o Currency, mas sim o fato dos cálculos envolverem valores ´muito grandes´ e ´muito pequenos´ (milhares de unidades e centavos de dinheiro). Pelo que me lembro, tem técnicas matemáticas sofisticadas para contornar esse problema (que não valem a pena usar num controle de estoque) ou simplesmente use mais precisão no cálculo (por exemplo, mudar de Currency para Double).
var Total: Currency; // internamente arredonda 4 casas Media: Currency; Resto: Currency; begin Total := 2000 * 0.51 + 1000 * 0.07640; Media := Total / 3000; Resto := Total - 3000 * Media; // Resto = -0.1 !!! ...
O problema não é o Currency, mas sim o fato dos cálculos envolverem valores ´muito grandes´ e ´muito pequenos´ (milhares de unidades e centavos de dinheiro). Pelo que me lembro, tem técnicas matemáticas sofisticadas para contornar esse problema (que não valem a pena usar num controle de estoque) ou simplesmente use mais precisão no cálculo (por exemplo, mudar de Currency para Double).
GOSTEI 0
Gilberto Fernandes
18/12/2006
vou tentar utilizar o Double nos calculos então, pra ver se modifica alguma coisa
Valeu Massuda
Valeu Massuda
GOSTEI 0