Cálculo dando errado

Delphi

03/02/2003

Trabalho com tabela Paradox, e o campo que estou trabalhando é do tipo float e o meu problema é o seguinte. Tenho um valor 79,28 faço então a divisão e o resultado desta divisão real dá 13,21 e na soma de 6 parcelas não dá 79,28 dá o resultado 79,26 somando na mão fora do programa e o que tenho que fazer para o resultado bater?
0bs.: a diferença pode ser acrescido na primeira parcela a divisão é de 6 parcelas.
Agradeço toda ajuda pois já me foi resolvido muitos problemas.


Anonymous

Anonymous

Curtidas 0

Respostas

Anonymous

Anonymous

03/02/2003

Prezado colega,
Seu problema aí não é de programação e sim de aritmética. Se, por exemplo, você trabalhar com mais casas decimais a tendência é o resultado se aproximar mais. Pois, veja bem, com duas casas decimais, se você acrescentar mais 0,01 em cada parcela o resultado da multiplicação vai dar 0,04 a mais, etc... Nesse caso, se você está trabalhando com moeda e não pode acrescer mais casas decimais, têm que usar muita criatividade. Por exemplo, você pode acrescentar 0,01 à duas parcelas, etc. Abraços.


GOSTEI 0
Anonymous

Anonymous

03/02/2003

Meu querido,

impossivel na mão você chegar ao resultado 79,28 somando 13,21. Ocorre que quando você divide na calculadora o valor 79,28, o resultado é 13,2133333333333 que é uma dizima periodica. Pois bem, tente multiplicar 13,21 puramente que o resultado será 79,26. Obviamente, você deve considerar os resultados das casas decimais, senão, nunca você alcançara um resultado racional.


[quote:44353beaff=´JOSE MORENO´]Trabalho com tabela Paradox, e o campo que estou trabalhando é do tipo float e o meu problema é o seguinte. Tenho um valor 79,28 faço então a divisão e o resultado desta divisão real dá 13,21 e na soma de 6 parcelas não dá 79,28 dá o resultado 79,26 somando na mão fora do programa e o que tenho que fazer para o resultado bater?
0bs.: a diferença pode ser acrescido na primeira parcela a divisão é de 6 parcelas.
Agradeço toda ajuda pois já me foi resolvido muitos problemas.[/quote:44353beaff]


GOSTEI 0
Carlos Catanduva

Carlos Catanduva

03/02/2003

Galara boa tarde. estou reabrindo esse post (para não ter que criar outro) pq me deparei com um problema.
Bom então vamos a ele.

Estou criando um sistema onde será efetuada uma divisão, porém notem testando ele notei um problema q pesquisei na net mais
não achei nada relacionado para q me desse uma luz pra resolver ele.


O código do meu botão dividir é esse abaixo:


procedure TForm1.btn_dividirClick(Sender: TObject);
var valor1, valor2, resultado:Extended;
begin

if Edit2.Text then
begin

if Edit3.Text then
begin
valor1:=StrToFloat(Trim(Edit2.Text));
valor2:=StrToFloat(Trim(Edit3.Text));

if valor2 0 then
begin
resultado:=valor1 / valor2;
Edit4.Text:=FloatToStr(resultado);
Edit1.SetFocus;
end
else
begin
ShowMessage(O valor 2 não pode ser zero!);
Edit3.SetFocus;
end;

end
else
begin
ShowMessage(Digite o valor 2!);
Edit3.SetFocus;
end;

end
else
begin
ShowMessage(Digite o valor 1!);
Edit2.SetFocus;
end;

end;


O PROBLEMA:

Se eu usar um valor que tenha menos de 16 algarismo para dividir, o resultado é esse abaixo

500000000000000, / 3, = 166666666666667,


Se eu usar um valor que tenha 16 ou mais algarismo para dividir, o resultado é esse abaixo com letras

5000000000000000, / 3, = 1,66666666666667E15




Porém eu testei os mesmos valores na calculadora do Windows (valores abaixo), e os resultados retornados são iguais (mais diferentes do resultado retornado pelo meu sistema), e posso
colocar valores com mais de 16 algarismo que o resultado não vem com letras

5000000000000000, / 3, = 1666666666666666,6666666666666667


500000000000000, / 3, = 166666666666666,66666666666666667




Bom galera eu preciso de uma ajuda pra q esse resultado do meu sistema retorne igual ao resultado da da calculadora do Windows (sem letras tbm), caso contrario vai me dar problemas

OBS: Eu já mudei os tipos das variáveis valor1, valor2, resultado de Extended para Real, Double, Currency, Single, bom tentei todas q eu conheço e achei, mais não deu certo

Se alguem puder me ajudar eu agradeço.

Obrigado galera abraço a todos.
GOSTEI 0
POSTAR