Precisão com casas decimais, como conseguir?
29/11/2005
0
Obrigado, desde já.
Titanius
Posts
29/11/2005
Sabado
Não sei como vc estaria calculando seus valores. Pode utilizar formatfloat que funciona.
29/11/2005
Massuda
Com relação aos valores que você exibe, use FormatFloat (como o sabado sugeriu) ou FloatToStrF.
30/11/2005
Titanius
[]s
30/11/2005
Macario
Eu uso dessa forma
Código: var fvalor, fvalor1: Extended; begin fvalor1 := 20.15; fvalor := 0; fvalor := fvalor + 0.60; fvalor := fvalor + 19; fvalor := fvalor + 0.01; fvalor := fvalor + 0.54; fvalor := Arredonda(fvalor,4); fvalor1 := Arredonda(fvalor1,4); if fvalor = fvalor1 then showmessage(´é igual´); if fvalor > fvalor1 then showmessage(´fvalor é maior´); if fvalor < fvalor1 then showmessage(´fvalor é menor´);
function Arredonda(Value: Extended; Decimals: integer): Extended; var Factor, Fraction: Extended; begin Factor := IntPower(10, Decimals); (* A conversão para string e depois para float evita erros de arredondamentos indesejáveis.*) Value := StrToFloat(FloatToStr(Value * Factor)); Result := Int(Value); Fraction := Frac(Value); if Fraction >= 0.5 then Result := Result + 1 else if Fraction <= -0.5 then Result := Result - 1; Result := Result / Factor; end;
Espero que ajude. 8)
30/11/2005
Massuda
Valores Double não tem representação exata no computador, de modo que pode ser que você obtenha um valor 0,800000000123 ao invés de 0,80 mesmo fazendo algum tratamento especial nesse valor.
Valores Currency não tem esse problema, pois tem representação exata no computador, embora usem 4 casas decimais sempre (logo, o valor 0,00001 não pode ser armazenado em um currency).
Quanto a ter que formatar o valor, que eu me lembre, sempre foi assim.
Clique aqui para fazer login e interagir na Comunidade :)