HOWTO · Java

Converter Int para Float em Java

Este tutorial demonstrará como converter inteiros em flutuantes em java.

Nesta página

Para converter um int primitivo em float no Java, atribua o número inteiro a uma variável float: float converted = value;. O Java realiza essa conversão por ampliação automaticamente, sem exigir um cast explícito. Se o valor estiver armazenado em um objeto wrapper Integer, você também pode chamar o método de instância floatValue(). Lembre-se de que float tem precisão limitada e que alguns valores inteiros grandes são arredondados durante a conversão.

Converta um int em float com conversão por ampliação

Um int primitivo pode ser atribuído diretamente a um float primitivo. O Java amplia o valor durante a atribuição, pois float pode representar magnitudes maiores do que int. Essa é uma conversão numérica; não é necessário escrever um cast. O programa completo a seguir mostra o caso comum com um valor pequeno.

Execute este exemplo autocontido:

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

public class Main {
  public static void main(String[] args) {
    int value = 56;
    float converted = value;
    System.out.println(converted);
  }
}

O programa imprime o valor convertido usando a formatação padrão de float do Java. O exemplo é uma classe Java completa, com um ponto de entrada, então pode ser compilado e executado como um pequeno programa independente. A conversão ocorre quando value é atribuído a converted; a impressão apenas exibe o valor resultante. Se a variável já for do tipo int, a atribuição direta é a forma mais clara.

Você também pode escrever float converted = (float) value;, mas o cast não altera essa conversão. Ele é redundante em uma atribuição de int para float e pode levar quem lê o código a pensar que o Java exige um cast explícito nesse caso. Prefira a atribuição direta, a menos que haja outro motivo para deixar a conversão explícita no código.

Use floatValue() com um objeto Integer

Integer é a classe wrapper do Java para o tipo primitivo int. Quando um valor já está armazenado em um objeto Integer, floatValue() retorna esse valor como um float primitivo. Por exemplo, a expressão Integer count = Integer.valueOf(56); float converted = count.floatValue(); converte o valor armazenado no objeto. Nesse caso, floatValue() é um método de instância chamado em count.

Esse caso, com um objeto wrapper, é diferente da atribuição direta do tipo primitivo apresentada acima. Se sua variável já for um int, não é necessário chamar um método de Integer; atribua o valor primitivo diretamente. Se um valor vier de uma API ou coleção como Integer, chamar floatValue() deixa explícitos o unboxing e a conversão. O Java também pode fazer o unboxing de um Integer em uma atribuição para float, mas o método pode ser útil para mostrar onde a conversão acontece. Ele não aumenta a precisão do tipo de destino: o resultado ainda é um float e está sujeito aos mesmos limites de precisão.

Entenda os limites de precisão ao converter int em float

Embora os dois tipos do Java usem 32 bits, eles codificam números de formas diferentes. Um int representa exatamente todos os números inteiros dentro de seu intervalo. Um float usa sinal, expoente e significando, com 24 bits de precisão no significando para valores finitos comuns. Por isso, ele representa exatamente todos os números inteiros apenas no intervalo contínuo de −2^24 a 2^24. Acima desse intervalo, os valores representáveis ficam mais espaçados, e alguns números inteiros são arredondados para um valor float próximo.

Isso não significa que toda conversão acima desse limite altere o valor: alguns números inteiros maiores ainda são representáveis com exatidão. O ponto principal é que já não há garantia de representação exata para todos os inteiros. “Ampliação” descreve a conversão de tipo no Java; não garante que o tipo de destino tenha precisão suficiente para preservar todos os valores de origem.

Se seus cálculos ou identificadores exigirem valores inteiros exatos em todo o intervalo de int, mantenha-os como int ou use outro tipo inteiro exato, em vez de convertê-los para float. Se você precisar de operações fracionárias e puder tolerar arredondamentos em magnitudes maiores, float pode ser adequado. Escolha de acordo com a precisão necessária na sua aplicação e evite comparar um valor convertido grande como se ele sempre tivesse de ser igual ao inteiro original.