Fórum Como saber se é um numero #259033

18/11/2004

0

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

Responder

Post mais votado

18/11/2004

há varias formas. uma delas:

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


Emerson Nascimento

Emerson Nascimento
Responder

Gostei + 1

Mais Posts

18/11/2004

Weber

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.


Responder

Gostei + 0

18/11/2004

Mitsalito

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;


Responder

Gostei + 0

18/11/2004

Marco Salles

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] :?: :?: :?:


Responder

Gostei + 0

19/11/2004

Weber

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



A melhor forma é essa, a prova de falhas.


Responder

Gostei + 0

19/11/2004

Mitsalito

meu amigo substitui o #8 por ´,´


Responder

Gostei + 0

19/11/2004

Paulo_amorim

[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É+


Responder

Gostei + 0

19/11/2004

Massuda

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.


Responder

Gostei + 0

19/11/2004

Marco Salles

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;



Responder

Gostei + 0

19/11/2004

Thomaz_prg

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´);


Responder

Gostei + 0

19/11/2004

José Henrique

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.


Responder

Gostei + 0

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

Aceitar