Como saber se é um numero

Delphi

18/11/2004

Ai galera tudo jóia.
Alguém sabem me dizer como faço pra saber se um determinado valor gravado dentro de um string é um número?


Mitsalito

Mitsalito

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

18/11/2004

há varias formas. uma delas:

try
    StrToFloat( Valor );
    ShowMessage(´É numérico´);
except
    ShowMessage(´Não é numérico´);
end;


GOSTEI 1

Mais Respostas

Weber

Weber

18/11/2004

var
  Variavel: Shortstring;
  heNumero: Currency;
  lNumero: boolean;
begin
  Try
    heNumero := StrToCurr(Trim(Variavel);
    lNumero := True;
  except
    lNumero := False;
  end;
end;


Não testei mas acho que deve funcionar.


GOSTEI 0
Mitsalito

Mitsalito

18/11/2004

Galera foi mau me precipitei ao perguntar devia ter tentado antes, mas já que enchi o saco uma possivel resposta

if (not(Valor[i] in [´0´ .. ´9´, #8])) then
begin
resultado := não numérico;


GOSTEI 0
Marco Salles

Marco Salles

18/11/2004

Galera foi mau me precipitei ao perguntar devia ter tentado antes, mas já que enchi o saco uma possivel resposta if (not(Valor[i] in [´0´ .. ´9´, #8])) then begin resultado := não numérico;


No meu entendimento, isto não e bem assim :cry:

1) Voce tem que varrer a String Valor :idea:

2) o [b:44e061f87d]decimal Separador [/b:44e061f87d]na sua rotina nao esta incluido :cry:
quer dizer que [b:44e061f87d]10,00 não e um número?????[/b:44e061f87d] :?: :?: :?:


GOSTEI 0
Weber

Weber

18/11/2004

try     StrToFloat( Valor );     ShowMessage(´É numérico´); except     ShowMessage(´Não é numérico´); end;



A melhor forma é essa, a prova de falhas.


GOSTEI 0
Mitsalito

Mitsalito

18/11/2004

meu amigo substitui o #8 por ´,´


GOSTEI 0
Paulo_amorim

Paulo_amorim

18/11/2004

[quote:343e452cee=´emerson.en´] try StrToFloat( Valor ); ShowMessage(´É numérico´); except ShowMessage(´Não é numérico´); end;



A melhor forma é essa, a prova de falhas.[/quote:343e452cee]

Olá

Na realidade, há casos em que o bloco try..except falha, não sei o motivo... já ouvi várias recomendações de que se faça o teste caracter por caracter como o Mitsalito mandou.
Com um detalhe: incluir DecimalSeparator e ThousandSeparator

AtÉ+


GOSTEI 0
Massuda

Massuda

18/11/2004

Não tenho números para verificar, mas acho que a versão que gera exceção é, em termos de desempenho, muito pior do que a versão que testa caractere por caractere no caso de receber uma string que não contenha um número válido. Dependendo da situação, isso pode fazer diferença.


GOSTEI 0
Marco Salles

Marco Salles

18/11/2004

meu amigo substitui o #8 por ´,´


Tb acho que nao e assim :cry:

Se o [b:dff3edc143]Decimal Separador[/b:dff3edc143] Escolhido No [b:dff3edc143]S.O[/b:dff3edc143] For Um Ponto No Lugar Da Virgula voce nao terá exito...

Acho que é assim :

function Verificar(Valor:String):Boolean;
var
i:Integer;
begin
result:=True;
for i:=1 to Length(valor) do
  begin
    if (not(valor[i] in [´0´ .. ´9´,DecimalSeparator])) then
      begin
         result :=false;
         exit;
      end;
  end;
end;



GOSTEI 0
Thomaz_prg

Thomaz_prg

18/11/2004

Se a versão do delphi for 6 ou acima vc pode tentar assim:

var
v:Real

IF TryStrToFloat( edit1.text , v )
showmessage(´É um número´)
ELSE
Showmessage(´Não é um número´);


GOSTEI 0
José Henrique

José Henrique

18/11/2004

No Delphi 5 tem
function StrToIntDef(const S: string; Default: Integer): Integer;

que retorna o Default caso S não seja integer.
var
  Number: Integer;
begin
  Number := StrToIntDef(Edit1.Text, 0);
  if Number = 0 then
 // é número inteiro
  else
 // não é

end;


Henrique.


GOSTEI 0
POSTAR