Array
(
)

Problema Valor do Field diferente do exibido no Dbedit.

Bterossi
   - 05 jan 2006

Boa Tarde,
Meu nome é Bruno e preciso da ajuda de voces para um caso em particular que nao encontrei solução. Estou desenvolvendo um sistema em delphi 7 e firebird com uso do IBDataSet.
Bom vamos lá.
Estou fazendo um calculo de porcentagem, e atribuo ao campo com (FieldByName().Value) 33,33¬ sobre 90,00 (133,33) sendo esta formula (90,00 * (33,33 / 100 + 1)).
O Resultado é 119,997, sendo arrendondado conforme o DisplayField = (´#,0.´), só que no DbEdit esta sendo exibido 12, quando era para exibir 120,00. Observei pelo debug que o field está com 120,00. já postei o resultado e a confução permanece, nao quero ultilizar função para arredondar o valor.
Todos os valores arredodados (pelo displayField) terminados em 0 como (10 = 9,997), (100 = 99,997) ele gera essa confução no DbEdit. Caso eu digite 119,997 ele arredonda para 119,99 e nao gera esse erro.
Todo o processo de calculo ultilizo uma funcao que usa somente FieldByName pois é uma funcao de impostos e alem de ser meio complexa, usarei em demais processos.
Quando eu libero para 3 casas decimais ele nao gera essa confução e atribui 119,997 ao DBEdit tando como ao Field, pois nao arredonda.
As casas decimais tambem tem que ficar flexivel entre 2 a 6 ou 8, pois posso no futuro ultilizar varios digitos. hoje tenho uma configuração para isso.
Bom é isso ai se alguem já passou por isso e puder me ajudar.

//funcao que calcula a porcentagem deixei simples pois o resto nao é necessario.
function CalculaValorPelaPorc(vValorBase: Extended; pPorcBase: Extended) : Extended;
begin
Result := 0;
if (vValorBase > 0) then
Result := vValorBase * (pPorcBase / 100 + 1);
end;


O campo no Firebird é um Numeric(18,8).

//Como está setado as propriedades do Field.
TBCDField(oCampo).Currency := True;
TBCDField(oCampo).EditFormat := ´#,0.´;
TBCDField(oCampo).DisplayFormat := ´,0.´;
TBCDField(oCampo).DefaultExpression := 0;
oCampo.DisplayWidth := 18;
Presicion := 18;
Size := 8;
oCampo.EditMask := ´´;


Grato Bruno Terossi.


Techsoft
   - 05 jan 2006

Bruno,

Tente alterar o teu displayfield para ´#,0.00´

Se quer mais casas decimais aumente a quantidade de zeros após o ponto

deve funcionar!

Qualquer coisa avisa ai.


Bterossi
   - 06 jan 2006

Bom dia, esqueci de mencionar no topico, mais eu ja tentei as mascaras do display e nao resolveu.

Obrigado pela ajuda, se alguem mais sober por favor fico no aguardo.