Python / float() / Converter valores em números de ponto flutuante
float() do Python converte números e strings numéricas compatíveis em números de ponto flutuante. Sem argumento retorna 0.0, mas não transforma automaticamente string vazia ou None em zero. Uma conversão bem-sucedida não garante um valor finito nem a precisão decimal necessária.
Conversão básica e valor original
float(value) retorna um resultado sem mudar o tipo da variável original. Ponto flutuante representa quantidades com um número finito de bits e pode aproximar frações. A presença de um ponto decimal não prova tipo ou exatidão. Veja a referência oficial de float().
Os exemplos completos usam Python 3 e a biblioteca padrão. Salve em UTF-8 como float_example.py e execute python float_example.py ou python3, conforme o ambiente. Cada exemplo seguinte pode substituir o conteúdo do arquivo e ser executado sozinho.
value = 3
converted = float(value)
print(converted, type(converted).__name__)
print(value, type(value).__name__)
print(float(" -2.5 "))
print(float("1e3"))
print(float())
print(float(True))
Saída esperada:
3.0 float
3 int
-2.5
1000.0
0.0
1.0
value continua inteiro. Espaços ao redor, sinal e notação exponencial como 1e3 são aceitos. True vira 1.0; rejeite booleanos separadamente se eles não forem permitidos na entrada.
Formatos, ValueError e TypeError
Strings numéricas comuns usam . como separador decimal. Separadores de milhares, vírgulas decimais e símbolos monetários não são interpretados automaticamente. Uma string malformada causa ValueError; um objeto não aceito como None causa TypeError.
for value in ("1,234.5", "2,5", "", None):
try:
print(float(value))
except (ValueError, TypeError) as error:
print(type(error).__name__)
ValueError
ValueError
ValueError
TypeError
Apagar vírgulas sem análise pode transformar o decimal pretendido 2,5 em 25. Defina formato e regras regionais primeiro e normalize somente de acordo com elas. Decida se entrada vazia é erro ou dado ausente, sem confundi-la com zero real.
Por que 0.1 mais 0.2 pode não ser igual a 0.3
A maioria dos sistemas armazena floats em formato binário. Algumas frações decimais não têm representação binária finita e são aproximadas. É uma limitação da representação, não uma conversão que falhou. O tutorial de ponto flutuante do Python explica o mecanismo.
import math
from decimal import Decimal
result = 0.1 + 0.2
print(result)
print(result == 0.3)
print(math.isclose(result, 0.3))
print(Decimal("0.1") + Decimal("0.2"))
0.30000000000000004
False
True
0.3
math.isclose() permite uma comparação aproximada, mas as tolerâncias devem corresponder às unidades e à precisão exigida. Próximo de zero, considere abs_tol. Para requisitos decimais exatos, considere Decimal criado da string decimal original. Decimal(0.1) começa por um valor binário já aproximado.
Verificar NaN, infinito e estouro de faixa
float() aceita nan e inf. NaN significa Not a Number; inf representa infinito. Uma conversão correta não prova que a entrada seja uma medição finita válida. Use math.isfinite() quando precisar de um número finito.
import math
for text in ("nan", "inf", "-inf", "2.5"):
number = float(text)
print(text, math.isfinite(number))
nan False
inf False
-inf False
2.5 True
Uma string com expoente enorme pode produzir infinito, enquanto converter um inteiro gigantesco pode causar OverflowError. NaN também é diferente de si mesmo: não o detecte com x == float("nan"). Use math.isnan() para essa verificação específica.
print(float("1e400"))
try:
print(float(10 ** 400))
except OverflowError:
print("OverflowError")
print(float("nan") == float("nan"))
inf
OverflowError
False
Aceitar apenas números finitos
Combine tratamento dos erros de conversão com a verificação de finitude. Esta função diferencia entrada malformada e valor não finito e retorna float apenas no sucesso. As mensagens inglesas do exemplo podem ser adaptadas aos seus usuários.
import math
def finite_number(text):
try:
number = float(text)
except (ValueError, TypeError) as error:
raise ValueError("not a number") from error
if not math.isfinite(number):
raise ValueError("not finite")
return number
for text in ("2.5", "nan", "abc"):
try:
print(finite_number(text))
except ValueError as error:
print(error)
2.5
not finite
not a number
A função verifica somente finitude. Idades, quantidades ou proporções podem exigir limites mínimos e máximos ou uma verificação de inteiro. Não substitua toda falha por 0.0, pois isso esconderia a diferença entre dados inválidos e zero verdadeiro.




