Como transformar decimais em frações exatas
A maioria das calculadoras e ferramentas online mostra apenas o resultado decimal, mas na prática você precisa da fração para manter a precisão em engenharia, física ou matemática pura. O processo é simples, mas existem detalhes que quem nunca pegou no jeito acaba perdendo.
Represente as fracoes com precisão usando o método de eliminação de decimais
O caminho mais direto é multiplicar o decimal por 10 até zerar a parte fracionária, transformar em fração e simplificar pelo MDC. Vou exemplificar com algo que encontrei semana passada num projeto real: converter 0,16666667 para fração. Multiplique por 10 repetidamente. Nesse caso, multiplico por 10 dez vezes, ou seja, por 1010, e obtenho 1666666670/10000000000. Aí simplifico pelo máximo divisor comum. O MDC entre os dois números pode ser encontrado rapidamente com o algoritmo de Euclides. A fração final reduzida fica 5000000/150000003, que aproxima bastante o valor original.
O problema é que isso funciona bem apenas quando o decimal é finito e razoavelmente pequeno. Quando entra vírgula flutuante ou resultados de cálculos intermediários com pontos flutuantes IEEE 754, o método tradicional de eliminação de decimais quebra. Já tive uma situação em que o resultado era algo como 0,3333333333333333 e eu precisava representar isso como fração. Multiplicar por potências de 10 gerava números enormes, e a simplificação ficava inviável computacionalmente. A solução que eu adotei foi usar a convergente de fração contínua. Em vez de pensar em multiplicar e dividir, construí a fração contínua do número e parei quando o erro absoluto ficava abaixo de 10-8. Para 1/3, a aproximação mais simples é exatamente 1/3. Para números irracionais como pi, a fração contínua fornece aproximantes racionais naturais: 3, 22/7, 333/106, 355/113. Note que 355/113 é notavelmente preciso para pi, com erro da ordem de 10-7, e é amplamente usado quando se precisa de uma fração prática.
O algoritmo de fração contínua funciona assim: dados um número real x e um denominador máximo permitido, extrai-se a parte inteira, toma-se o inverso da parte fracionária e repete-se até que o denominador exceda o limite. As convergentes intermediárias são as melhores aproximações racionais possíveis. Esse método é conhecido e implementado em bibliotecas como mpmath em Python e nas funções convert/frac do Maple.
Ferramenta prática para obter frações a partir de decimais
Se você quer algo pronto para usar sem implementar o algoritmo do zero, recomendo a biblioteca mpmath. Ela tem uma função nsimplify que aceita um float e devolve uma fração com denominador dentro de um limite que você define. O comando básico é nsimplify(0.16666667, rational=True), que retorna algo próximo de 1/6 dependendo da precisão interna. Para uso offline, o SymPy também oferece a função radsimp e conversões via Fraction do módulo padrão do Python. O construtor fractions.Fraction do Python já faz a parte inteira do trabalho: dado um float, ele constrói a fração exata correspondente à representação binária do float. Isso é útil quando você quer a fração exata do resultado de um cálculo numérico, mas cuidado porque a fração exata de 0.1 não é 1/10, e sim 3602879701896397/36028797018963968. A diferença entre fração exata do float e fração racional aproximada é um detalhe que causa erros difíceis de rastrear.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Para projetos que exigem controle total, escrevi um script simples baseado em frações contínuas que converte decimais em frações com denominador limitado. O código usa apenas operações inteiras, então roda rápido mesmo para números grandes. A complexidade é proporcional ao logaritmo do denominador alvo, o que significa que para frações com denominador até 106 o tempo de execução fica na casa dos microssegundos.
Limitações e armadilhas conhecidas
Não existe um método universal que funcione bem em todos os cenários. Se o decimal vem de uma medição experimental com ruído, forçar uma fração exata vai produzir resultados absurdos. Nesse caso, o correto é usar estimação de parâmetros ou ajuste de mínimos quadrados em vez de conversão direta. Também é importante entender que representar um número como fração não melhora a precisão em si. Frações são representações exatas de racionais, mas números irracionais não têm representação fracionária exata. O que se obtém são aproximações racionais, e a qualidade da aproximação depende do denominador permitido. Denominadores grandes aumentam a precisão, mas tornam a fração menos útil para cálculo manual e para exibição clara.
Outro ponto: em sistemas embarcados com aritmética de ponto fixo, a conversão para frações pode ser cara se você não controlar o denominador. Alguns processadores digitais de sinal (DSPs) usam aproximações em potência de dois para evitar multiplicação cara, mas isso é uma estratégia diferente que não se encaixa no conceito geral de represente as fracoes com denominadores arbitrários.
Exemplo completo passo a passo
Vamos converter 2,375 para fração. A parte fracionária é 0,375. Multiplicando por 1000, obtemos 375/1000. O MDC de 375 e 1000 é 125. Dividindo ambos por 125, chegamos a 3/8. Juntando com a parte inteira, o resultado é 2 e 3/8, ou 19/8 como fração imprópria. Para números periódicos, como 0,333..., a abordagem muda. Esse é exatamente 1/3. Você pode identificar o período pela repetição de dígitos e montar a fração diretamente. Um truque prático: se o período tem n dígitos, multiplique por 10n e subtraia o número original. Para 0,121212..., o período tem dois dígitos, então multiplicamos por 100, subtraímos e obtemos 12/99, que reduz para 4/33.
Se você está trabalhando em Python, um exemplo mínimo usando frações contínuas pode ser escrito em cerca de dez linhas. O código lê um número, itera extrair partes inteiras e inverter restos, armazena as convergentes e escolhe a última cuja denominador não exceda um limite pré-definido. O resultado é uma fração fractions.Fraction pronta para uso em cálculos subsequentes. Resumindo o que importa: conheça a origem do seu decimal. Se é exato, use eliminação de zeros e MDC. Se é periódico, use álgebra de repetição. Se é numérico ou medido, use frações contínuas com denominador controlado. E não confunda fração exata do ponto flutuante com aproximação racional.