Problema Valor do Field diferente do exibido no Dbedit.
05/01/2006
0
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.
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.
Bterossi
Curtir tópico
+ 0
Responder
Posts
05/01/2006
Techsoft
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.
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.
Responder
06/01/2006
Bterossi
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.
Obrigado pela ajuda, se alguem mais sober por favor fico no aguardo.
Responder
Clique aqui para fazer login e interagir na Comunidade :)