Fórum Dúvida com Currency #297422

28/09/2005

0

Que função devo utilizar para converter o texto de um Edit ´(5.850,55)´ (negativo) para currency em uma operação matemática por exemplo.
Se eu utilizar StrToCurr(´(5.850,55)´) vai dar erro de converção devido aos parenteses e ao ponto.


Mkoch

Mkoch

Responder

Posts

28/09/2005

Mkoch

Agradeço se alguém pude ajudar


Responder

Gostei + 0

28/09/2005

Steve_narancic

Não tem como testar se existir o parenteses ele remover os parentes e colocar um hifem e dai sim converter para currency, algo como:


var
x: Currency;
begin
 if Pos(´(´,edt1.Text) > 0 then
 begin
  edt1.Text := StringReplace(edt1.Text,´(´,´´,[rfReplaceAll]);
  edt1.Text:=  StringReplace(edt1.Text,´)´,´´,[rfReplaceAll]);
  edt1.Text:= ´-´+edt1.Text;
 end;
 x:= strtocurr(edt1.text);
end;



Responder

Gostei + 0

28/09/2005

Rjun

Acho que daria para fazer algo assim:

function TForm1.StrToCurr(Valor: string): Double;
begin
  Valor := StringReplace(Valor, ´(´, ´-´, [rfReplaceAll]);
  Valor := StringReplace(Valor, ´)´, ´´, [rfReplaceAll]);
  Valor := StringReplace(Valor, ´.´, ´´, [rfReplaceAll]);
  result := StrToFloat(Valor);
end;



Responder

Gostei + 0

28/09/2005

Steve_narancic

Acho que daria para fazer algo assim:
function TForm1.StrToCurr(Valor: string): Double;
begin
  Valor := StringReplace(Valor, ´(´, ´-´, [rfReplaceAll]);
  Valor := StringReplace(Valor, ´)´, ´´, [rfReplaceAll]);
  Valor := StringReplace(Valor, ´.´, ´´, [rfReplaceAll]);
  result := StrToFloat(Valor);
end;

[b:63c71e2eb9]
Realmente seu código ficou bem melhor, que o meu[/b:63c71e2eb9]


Responder

Gostei + 0

28/09/2005

Mkoch

Galera valeu pela ajuda, fiz a função e funciona muito bem se servir para mais alguém ai vai:
function StrToMoney(const Valor: ShortString): Currency;
var
  S: ShortString;
  Negativo: Boolean;
begin
  Result := 0;
  if Vazio(Valor) then
    Exit;
  Negativo := False;
  try
    //Valor = 51.368,00 | R$ 51.368,00 | (R$ 51.368,00) | -R$ 51.368,00 e outros

    //Remove os Possíveis espaços em Branco
    S := StringReplace(Valor, ´ ´, ´´, [rfIgnoreCase]);

    //Remove o Símbolo de Dinheiro ´R$´
    S := StringReplace(S, CurrencyString, ´´, [rfIgnoreCase]);

    //Remove o separador de milhar ´.´
    S := StringReplace(S, ThousandSeparator, ´´, [rfIgnoreCase]);

    //Verifica se o número é negativo tem ´-´ ou ´(´ e ´)´
    if (Pos(´-´, S) > 0) or (Pos(´(´, S) > 0) or (Pos(´)´, S) > 0) then
    begin
      Negativo := True;
      S := StringReplace(S, ´-´, ´´, [rfIgnoreCase]);
      S := StringReplace(S, ´(´, ´´, [rfIgnoreCase]);
      S := StringReplace(S, ´)´, ´´, [rfIgnoreCase]);
    end;



    Result := StrToCurr(S);
    if Negativo then//Inverte para Negativo se necessário
      Result := Result * -1;
  except
    on EConvertError do
      MsgErro(´Não foi possível converter ´ + QuotedStr(Valor) + ´ para um valor monetário ´ + QuotedStr(S) + ´.´);
  end;
end;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar