int, float e string
Convertem entre texto e número. Parecem simples, mas têm três armadilhas que já derrubaram muito fluxo financeiro: int não aceita decimais, float descarta a vírgula sem avisar e float não entende o formato brasileiro com ponto de milhar.
Sintaxe
int(valor) float(valor) string(valor)
Exemplos testados
| Expressão | Resultado |
|---|---|
int('42') | 42 |
float('1.5') | 1.5 |
float('19.99') | 19.99 |
float('1,5')a vírgula é descartada, sem erro | 15 |
float('1000,50')idem: 1000,50 vira 100050 | 100050 |
float(replace(replace('1.234,56', '.', ''), ',', '.'))limpeza para o padrão brasileiro | 1234.56 |
float(replace(replace('-1.234,56', '.', ''), ',', '.')) | -1234.56 |
float(replace(replace('1000.50', '.', ''), ',', '.'))a limpeza estraga texto com ponto decimal | 100050 |
int(formatNumber(float('3.14'), 'F0')) | 3 |
string(42)devolve o texto 42 | 42 |
bool('true') | true |
Quando usar
Use int e float quando um valor chega como texto (campos de formulário, colunas de texto, anexos) e você precisa calcular com ele. O cuidado é sempre o mesmo: descubra em que formato o texto vem. Se vem como 1234.56, float serve direto; se vem como 1.234,56 ou 1234,56 (padrão brasileiro), é preciso limpar antes, porque a conversão direta ou falha ou, pior, devolve um valor cem vezes maior sem nenhum aviso. Quando o resultado precisa ser inteiro, evite int sobre decimais e trabalhe desde o início em centavos. Valide o resultado (maior que zero, dentro de uma faixa esperada) antes de gravar em qualquer sistema.
Armadilhas
int('3.14')eint(float('3.14'))dão erro ("The value cannot be converted to the target type"). Para obter um inteiro, arredonde antes comformatNumbere'F0', ou trabalhe sempre com inteiros.float('1,5')devolve 15, não 1,5, efloat('1000,50')devolve 100050. A vírgula é descartada, e o fluxo segue com um valor cem vezes maior.float('1.234,56')dá erro (ponto de milhar mais vírgula decimal).- A limpeza
replace(replace(x, '.', ''), ',', '.')só vale para texto no padrão brasileiro. Em1000.50ela remove o ponto decimal e devolve 100050. Decida o formato na origem. - Textos com "R$" ou espaços precisam de outro
replaceantes (testado comR$ 1.234,56).
Perguntas frequentes
Como evitar erros de arredondamento com dinheiro?
Converta o valor para centavos inteiros e calcule com div e mod. Veja o guia de parcelas.
Como converter um valor no padrão brasileiro para centavos?
int(replace(formatNumber(float(replace(replace(x, '.', ''), ',', '.')), '0.00', 'en-US'), '.', '')) devolve 123456 para 1.234,56, e -123456 para -1.234,56 (testado).