Erro no código - URGENTE

Delphi

07/11/2013

Meu código está retornando ao seguinte ERRO: is not a valid floating point valid
Estou usando DbEdit s e CheckBox (ck8 ao ck16)



procedure TFClientes.btnCalcularClick(Sender: TObject);
Var Resultado1, Valor1, Valor2, Valor3 : Real;
Var Resultado2, Resultado3, Resultado4, Resultado5, Resultado6, Resultado7 :Real;
Var SubTotalServicos, SubTotalTaxas, Total :Real;
Var SomaCk8, SomaCk9, SomaCk10, SomaCk11, SomaCk12, SomaCk13, SomaCk14, SomaCk15, SomaCk16 :Real;
begin
Resultado1:= StrToFloat(DBEdit55.Text) * StrToFloat(txtValor1.Text);
Resultado2:= StrToFloat(DBEdit57.Text) * StrToFloat(txtValor2.Text);
Resultado3:= StrToFloat(DBEdit59.Text) * StrToFloat(txtValor3.Text);
Resultado4:= StrToFloat(DBEdit61.Text) * StrToFloat(txtValor4.Text);
Resultado5:= StrToFloat(DBEdit63.Text) * StrToFloat(txtValor5.Text);
Resultado6:= StrToFloat(DBEdit65.Text) * StrToFloat(txtValor6.Text);
Resultado7:= StrToFloat(DBEdit67.Text) * StrToFloat(txtValor7.Text);

SubTotalServicos := Resultado1 + Resultado2 + Resultado3 + Resultado4 + Resultado5 + Resultado6 + Resultado7;

if Ck8.Checked = true then
begin
SomaCk8 := strToFloat(DBValor8.Text);
end
else
SomaCk8 := 0;

if Ck9.Checked = true then
begin
SomaCk9 := strToFloat(DBValor9.Text);
end
else
SomaCk9 := 0;

if Ck10.Checked = true then
begin
SomaCk10 := strToFloat(DBValor10.Text);
end
else
SomaCk10 := 0;

if Ck11.Checked = true then
begin
SomaCk11 := strToFloat(DBValor11.Text);
end
else
SomaCk11 := 0;

if Ck12.Checked = true then
begin
SomaCk12 := strToFloat(DBValor12.Text);
end
else
SomaCk12 := 0;

if Ck13.Checked = true then
begin
SomaCk13 := strToFloat(DBValor13.Text);
end
else
SomaCk8 := 0;

if Ck14.Checked = true then
begin
SomaCk14 := strToFloat(DBValor14.Text);
end
else
SomaCk14 := 0;

if Ck15.Checked = true then
begin
SomaCk15 := strToFloat(DBValor15.Text);
end
else
SomaCk15 := 0;

if Ck16.Checked = true then
begin
SomaCk16 := strToFloat(DBValor16.Text);
end
else
SomaCk16 := 0;

SubTotalTaxas:= SomaCk8 + SomaCk9 + SomaCk10 + SomaCk11 + SomaCk12 + SomaCk13 + SomaCk14 + SomaCk15 + SomaCk16;

txtResultado.Text := FloatToStr(SubTotalServicos + SubTotalTaxas);
end;
Marcos Loyola

Marcos Loyola

Curtidas 0

Respostas

Thiago Irrazabal

Thiago Irrazabal

07/11/2013

Bom dia, cara pelo que vi do teu código, acredito que algum dos valores está indo com ponto ao invés de virgula, ou talvez com ponto e depois virgula, por exemplo: "1.500,50", esse valor ocasionaria esse erro, outra coisa... os DBEdit's estão ligados a um ClientDataset correto? então faça os cálculos nos campos que eles estão ligados no ClientDataset, mas se tu preferir continuar calculando direto no DBEdit então é só dar um StringReplace em todos os DBEdit's, tirar o ponto exemplo:

Resultado1:= StrToFloat(StringReplace(DBEdit55.Text, '.', '', [rfReaplceAll, rfIgnoreCase])) * StrToFloat(StringReplace(txtValor1.Text, '.', '', [rfReplaceAll, rfIgnoreCase]));




Att,
Thiago Irrazabal de Oliveira.
GOSTEI 0
Marcos Loyola

Marcos Loyola

07/11/2013

Todos campos número são do tipo inteiro Duplo no Access
estão só com virgula 15,50 por ai vai
GOSTEI 0
Thiago Irrazabal

Thiago Irrazabal

07/11/2013

Todos campos número são do tipo inteiro Duplo no Access
estão só com virgula 15,50 por ai vai


Se tu diz... enfim tu já debugou? abraço



Att,
Thiago Irrazabal de Oliveira.
GOSTEI 0
Vagner Almeida

Vagner Almeida

07/11/2013

Cara use StrToFloatDef(Campo.Text, 0) ao invés de strToFloat(Campo.Text).

Ficaria assim: Resultado := StrToFloatDef(Campo.Text, 0);


Outra opção é usar o FormatFloat(',0.00;', Campo.Text); - o retorno é uma String, por isso teria que converter para Float depois.

Ficaria assim: Resultado := StrToFloat( FormatFloat(',0.00;', Campo.Text) );

MAS a resposta de Thiago Irrazabal, acredito ser a mais correta. Porém, fica ai algumas informações a mais.


Espero ter ajudado...
GOSTEI 0
Samuel Santos

Samuel Santos

07/11/2013

Bem vai mais uma ajuda.
Não utilize o conteúdo do DBEdit.text para efetuar seus cálculos. Após o usuário efetuar a edição no campo, o conteúdo irá para o Dataset em que este está ligado:
- Resultado1:= Query1.FieldByName('CAMPOX').AsFloat * Query1.FieldByName('CAMPOX').AsFloat;
Outra coisa que gosto de usar é o tipo Double no lugar do Real: Var Resultado1, Valor1, Valor2, Valor3 : Double;

SSS
GOSTEI 0
Marcos Loyola

Marcos Loyola

07/11/2013

Valeu pelas dicas pessoal
fiz da forma que Samuel passou Resultado1:= Query1.FieldByName('CAMPOX').AsFloat * Query1.FieldByName('CAMPOX').AsFloat;
funcionou blz
GOSTEI 0
POSTAR