Somar ponto flutuante
07/06/2008
0
tenho 3 edits (valor, valor1, valor2) então to fazendo a soma deles e jogando o valor lá no meu edit valortotal, blz, eu consigo somar valores assim 1000,00(valor) + 1000,00 (valor1) + 1000,00(valor2) = R$ 3.000,00.
Mas o problema quando eu faço uma soma assim
1.000,00 + 1.000,00 ai ele da um erro assim
(´ Is Not A Validad Floating point Value ´)
Pelo que entendi ele não consegue somar o pont (´.´).
A Pergunta é , Como eu faço para fazer ele somar com o ponto.
Segue o meu codigo
procedure TF_solicitacao.valor2Exit(Sender: TObject);
begin
somatotal:= strtofloat(valor.text) + strtofloat(valor1.text) + strtofloat(valor2.text);
valortotal.Text:= FloatToStr(Somatotal);
valortotal.text:= formatfloat(´R$ #,0.00´, somatotal);
end;
Cleiflavio
Posts
07/06/2008
Edilcimar
08/06/2008
Essistemas
antes de converter
function LimparString(Campo: string): string;
var
I: Integer;
begin
Result := ´´; for I := 1 to Length(Campo)do
if Campo[I] <> ´.´ then
Result := Result + Campo[I];
end;
Function QSCURR(parString:String):Double;
begin
Result:=StrToCurr(LimparString(parString));
end;
Table1Valor.Value :=QsCurr(Edit1.Text) ;
09/06/2008
Cleiflavio
eu estou declarando as duas funções e chamando lá na minha saido do edit mas ele dá esse erro
´Record, obeject or class type required´
a não ser se eu estiver declarando errado porque não entedi direito oq vc fez na ultima linha
Table1Valor.Value :=QsCurr(Edit1.Text) ;
minha declaração é essa ==>> valor.text.value := QsCurr(valor.text);
eu acredito que eu esteje declarando errado
segu meu codigo novamente:
function LimparString(Campo: string): string;
var
I: Integer;
begin
Result := ´´; for I := 1 to Length(Campo)do
if Campo[I] <> ´.´ then
Result := Result + Campo[I];
end;
Function QSCURR(parString:String):Double;
begin
Result:=StrToCurr(LimparString(parString));
end;
procedure TF_solicitacao.valorExit(Sender: TObject);
begin
//Table1Valor.Value :=QsCurr(Edit1.Text) ;
valor.text.value := QsCurr(valor.text);
somatotal:= strToFloat(valor.text);
valortotal.Text:= floatToStr(Somatotal);
valortotal.text:= formatfloat(´R$ #,0.00´, somatotal);
end;
Clei Flavio
09/06/2008
Essistemas
no uses do meu form e pronto
ex:
unit UFuncServidor;
interface
Uses
Windows, Messages, SysUtils,Controls, Classes, ComServ, ComObj, VCLCom, DataBkr,
DBClient, DBXpress, FMTBcd, Provider, DB, SqlExpr,Dialogs,
Variants ;
Function FloatToStrSQL(Const lValue:Extended; Const lDigits:Integer):String;
Function QS(parSQL:String):String;
Function QSF(parFLOAT:Double):String;
Function QSD(parDATA:TDateTime):String;
function CHECK_NOT_NULL(var par_sErro:String;par_Delta:TCustomClientDataSet;par_Campo:String;par_Mensagem:String;par_UpperCase:String):String;
Function DiadaSemana( Data :TDateTime ) : String ;
implementation
Uses UDm ;
function CHECK_NOT_NULL(var par_sErro:String;par_Delta:TCustomClientDataSet;par_Campo:String;par_Mensagem:String;par_UpperCase:String):String;
Var var_sConverte : String;
Begin
var_sConverte:=par_Delta.FieldByName(par_Campo).AsString;
If( Not VarIsClear(par_Delta.FieldByName(par_Campo).NewValue) ) Then Begin
If( var_sConverte=´´ ) Then Begin
vpErro:=vpErro+Chr(13)+´ERRO:´ +par_Mensagem+´ DEVE SER PREENCHIDO ´;
Result:=vpErro;
End Else Begin
If( par_UpperCase=´S´ ) Then
par_Delta.FieldByName(par_Campo).NewValue:=UpperCase(VarToStr(par_Delta.FieldByName(par_Campo).NewValue));
end;
end;
end ;
Function DiadaSemana( Data :TDateTime ) : String ;
var
NoDia : Integer ;
DiaDaSemana : array [ 1..7 ] of String ;
begin
{ Dias da Semana }
DiaDasemana [ 1 ] := ´DOMINGO´ ;
DiaDasemana [ 2 ] := ´SEGUNDA-FEIRA´ ;
DiaDasemana [ 3 ] := ´TERÇA-FEIRA´ ;
DiaDasemana [ 4 ] := ´QUARTA-FEIRA´ ;
DiaDasemana [ 5 ] := ´QUINTA-FEIRA´ ;
DiaDasemana [ 6 ] := ´SEXTA-FEIRA´ ;
DiaDasemana [ 7 ] := ´SÁBADO´ ;
NoDia := DayOfWeek ( Data );
Result := DiaDaSemana [ NoDia ] ;
end;
Function QS(parSQL:String):String;
Begin
Result:=QuotedStr(parSQL);
end;
Function QSD(parDATA:TDateTime):String;
Begin
Result:=QuotedStr(FormatDateTime(´MM/DD/YYYY´,parDATA));
End;
Function QSF(parFLOAT:Double):String;
Begin
Result:=QuotedStr(FloatToStrSQL(parFLOAT,02));
end;
Function QSI(parINTEIRO:Integer):String;
Begin
Result:=QuotedStr(IntToStr(parINTEIRO));
end;
Function EDNE(parData:String):TDateTime;
Begin
Result:=StrToDate(parData);
End;
Function EFNE(parValor:String):Double;
Begin
If(parValor=´´) Then
parValor:=´0´;
While(Pos(´.´,ParValor)>0) Do
Delete(parValor,Pos(´.´,parValor),1);
Result:=StrToFloat(parValor);
End;
Function EINE(Text:String):Integer;
Begin
While(Pos(´.´,Text)>0) Do
Delete(Text,Pos(´.´,Text),1);
Try
Result:=StrToInt(Text);
Except
Result:=0;
End;
End;
Function FloatToStrSQL(Const lValue:Extended; Const lDigits:Integer):String;
Begin
Result:=FloatToStrF(lValue,ffFixed,15,lDigits);
Result[Length(Result)-lDigits]:=´.´;
End;
qualquer duvida estamos por aqui !
09/06/2008
Cleiflavio
bom eu não posso colocar essa função no meu proprio FORm
e quando eu declaro Table1Valor.Value :=QsCurr(Edit1.Text) ; lá no meu valor esse Table1Valor que eu não estou entendendo, ele é o nome da minha unit isso ????
Valeuuu, obirgado !!!!!
09/06/2008
Paulo
09/06/2008
Cleiflavio
é o seguintejá verifiquei minhas configurações e estão normais, e essa declaração sua está igual a minha e está funcionando perfeitamente quando eu coloco 1000,10 + 1000,10 ele mostra no valortotal 2.000,20, bom até ai ok, O Problema é que isso é uma solicitação e não vai ser eu quem vai preencher vão ser os usuarios e vc sabe como é usuario né, sempre vão acabar colocando 1.000,10 + 1.000,10 entendeu ai ele da esses erros que que já sitei acima, Então quero achar um jeito de quando meu edit receber o valor e converte em algo que tire o ponto e faça a soma dai ele mostra o valor convertido no valor total, spo preciso disso pois o soma já está feita.
Se puder me ajudar eu agradeço.
Obrigado
09/06/2008
Paulo
if (key in[´.´]) then
key := #0;
09/06/2008
Cleiflavio
Caraa valeuuuu deu certo isso que eu precisava, Valeuuuu mesmo, mas ainda tenho um pequeno problema.
Quando eu vou somando tipo coloco lá o valor no edit depois no edit1 ai eu tenho a soma no valor total eu eu clico com o mouse no edit ele da o mesmo erro ´ is not a valid Floating point value ´ estrano só o fato de eu clicar no edit que eu já coloquei um valor ele da esse erro, vc tem alguma sugestão ??
Clique aqui para fazer login e interagir na Comunidade :)