Como verificar se uma string é um float em Python
Neste artigo você vai aprender a como verificar se uma string é um float, ou seja, se ela possui um número com casas decimais

Fala programador(a), beleza? Bora aprender mais sobre Python, strings e floats!
A principal ideia deste artigo é verificar se uma string, por exemplo: “14.12” é de fato um float
E para isso precisaremos criar uma instrução de código onde verificamos se uma string é um número
O método isdigit é capaz disso, porém temos um problema
Pelo fato de ter um ponto no meio da string ele não responde corretamente, então temos que fazer um ajuste no nosso valor
Vamos utilizar replace para tirar todos os pontos ou vírgulas, se for o seu caso
Veja então a solução deste problema:
numero = "12.4"
nao_numero = "asd"
print(numero.replace('.','',1).isdigit()) # True
print(nao_numero.replace('.','',1).isdigit()) # False
No exemplo acima testamos a expressão necessária para verificar a string com dois valores, um float e outro não número
Recebemos um booleano como resposta nas duas sentenças, a que tem um número retorna True e a que não tem False
Então por meio destas respostas vamos guiar o nosso código, podemos inserir a sentença um if, por exemplo
E até em outros casos, caso a utilização seja repetitiva, transformar em uma função pode ser uma boa ideia
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 120 aulas
- 4 projetos
- 9h 45min
Conclusão
Neste artigo você viu como verificar se uma string é um float em Python 3
Utilizamos dois métodos para isso:
- replace: para remover os pontos ou vírgula da string;
- isdigit: para verificar se o valor é um número;
Desta maneira conseguimos identificar se um valor é um número decimal ou não
Confira também nosso catálogo de cursos gratuitos, com aulas semanais no YouTube
Onde o replace + isdigit falha:
Antes de sair usando essa solução em tudo, se liga nos casos que ela não cobre
O isdigit só olha pra dígito, então qualquer caractere que não seja número derruba o teste, mesmo quando o valor é um float válido pro Python
Veja:
print("-12.4".replace('.','',1).isdigit()) # False, por causa do sinal de menos
print("12,4".replace('.','',1).isdigit()) # False, aqui o separador é vírgula
print(" 12.4 ".replace('.','',1).isdigit()) # False, tem espaço sobrando
print("12".replace('.','',1).isdigit()) # True, mas isso é um inteiro
Ou seja: número negativo, vírgula como separador decimal e espaço em volta passam batido
E o inteiro entra como verdadeiro também, o que pode ou não ser o que tu quer
Se a tua string vem sempre no mesmo formato (tipo um dado que você mesmo gerou) o replace + isdigit resolve numa linha e tá ótimo
Agora se ela vem de fora (usuário, formulário, arquivo, API), vale usar a abordagem da próxima seção
Jeito mais seguro: try e except com float():
A forma mais confiável de saber se uma string é um float é simplesmente pedir pro Python converter ela e ver se dá ruim
Se converter, é float
Se estourar erro, não é
try:
float("14.12")
print(True)
except ValueError:
print(False)
Parece preguiça, mas é o contrário: quem decide o que é um float válido aqui é o próprio Python, e não uma regrinha que a gente escreveu na mão
Esse jeito já aceita negativo, espaço em volta e notação científica sem tu precisar tratar nada
Tome cuidado com um detalhe: o float() também aceita textos especiais como "nan" e "inf", então se a tua regra de negócio não pode receber isso, filtra antes
E por que ValueError e não um except pelado? Porque except sem tipo engole qualquer erro, inclusive os que você ia querer ver estourando
Já me ferrei uma vez por causa disso 😀
Transformando em uma função reutilizável:
Como eu falei ali em cima, se a verificação se repete no teu código, joga isso numa função e para de copiar e colar
def e_float(valor):
try:
float(valor)
return True
except (ValueError, TypeError):
return False
print(e_float("14.12")) # True
print(e_float("-3.5")) # True
print(e_float("asd")) # False
print(e_float(None)) # False
Repara que entrou o TypeError junto: é ele que aparece quando o valor nem string é (um None, por exemplo)
Agora dá pra usar num if bonitinho:
valor = "14.12"
if e_float(valor):
numero = float(valor)
print(f"É float e vale {numero}")
else:
print("Não é um número decimal")
Massa que a função já devolve o booleano pronto, aí o resto do teu código fica limpo
E quando o número vem com vírgula?
Aqui no Brasil é comum o valor chegar como "14,12" em vez de "14.12"
O Python não entende a vírgula como separador decimal, então a conversão quebra
A saída é normalizar antes de converter:
def e_float_br(valor):
try:
float(str(valor).strip().replace(',', '.'))
return True
except (ValueError, TypeError):
return False
print(e_float_br("14,12")) # True
print(e_float_br(" 14,12 ")) # True
O strip tira o espaço das pontas e o replace troca a vírgula pelo ponto
Só cuidado se a tua string vier com separador de milhar (tipo "1.234,56"): nesse caso tu precisa tirar o ponto primeiro e só depois trocar a vírgula, senão vira bagunça
Validando o que o usuário digita:
O caso de uso mais comum disso tudo é o input do usuário, que sempre chega como string, mesmo quando a pessoa digita um número
Dá pra prender o programa num laço até vir um valor válido:
while True:
entrada = input("Digite um número decimal: ")
if e_float(entrada):
numero = float(entrada)
break
print("Valor inválido, tenta de novo")
print(f"Número recebido: {numero}")
Repara que a gente valida e converte na sequência, aproveitando o mesmo teste
Esse é o padrão que tu vai repetir em calculadora, formulário de terminal, leitura de CSV e por aí vai
Perguntas frequentes:
O isdigit funciona com float?
Não do jeito que a gente espera: o isdigit devolve verdadeiro só quando todos os caracteres da string são dígitos, e o ponto decimal não é dígito
Por isso a gente remove o ponto com replace antes de chamar ele, ou usa o try/except com float()
Qual a diferença entre isdigit, isnumeric e isdecimal?
Os três olham pra caracteres numéricos, com abrangências diferentes: o isdecimal é o mais restrito, o isdigit aceita alguns caracteres extras como o expoente sobrescrito, e o isnumeric é o mais amplo, aceitando coisas como algarismo romano e fração escrita em caractere único
O que interessa aqui: nenhum dos três aceita ponto ou vírgula, então nenhum deles sozinho valida um decimal
Como saber se uma string é int ou float?
Se ela passa no isdigit puro, é inteiro
Se ela só passa na conversão com float(), tem casa decimal
valor = "14.12"
if valor.isdigit():
print("inteiro")
elif e_float(valor):
print("float")
else:
print("não é número")
E se eu quiser saber o tipo da variável, não da string?
Aí o assunto é outro: usa o isinstance
print(isinstance(14.12, float)) # True
print(isinstance("14.12", float)) # False, é uma string
Repara que a string com número dentro continua sendo string pro Python, beleza?
Leia também
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
Blog | Mais populares

Como limitar números decimais em Python?
Adicionar uma seção sobre f-strings, o jeito mais usado hoje pra formatar casa decimal. Exemplo: valor = 3.14159 e print(f"{valor:.2f}") mostrando 3.14. Explicar que o […]
Como programar Python [dicas e códigos iniciantes aqui]
Python é uma linguagem de programação muito popular e uma de alto nível utilizada em diferentes tipos de aplicações, como para o desenvolvimento web, em Machine […]

Como inverter uma string em Python
Neste artigo você vai aprender a como inverter uma string em Python, de uma maneira simples para você utilizar em seus programas Conteúdo também disponível […]

Valeu cara!
Foi de grande ajuda