HOWTO · Java

Convertir Int a Float en Java

Este tutorial demostrará cómo convertir un entero en flotante en Java.

En esta página

Para convertir un int primitivo a float en Java, asigna el entero a una variable float: float converted = value;. Java realiza automáticamente esta conversión de ampliación, así que no hace falta un cast explícito. Si el valor está almacenado en un objeto envoltorio Integer, puedes llamar a su método de instancia floatValue(). Ten en cuenta que float tiene una precisión limitada, por lo que algunos enteros grandes se redondean al convertirlos.

Convertir un int a float mediante una conversión de ampliación

Puedes asignar directamente un int primitivo a un float primitivo. Java amplía el valor como parte de la asignación porque float puede representar magnitudes mayores que int. Se trata de una conversión numérica; no es necesario escribir un cast. El siguiente programa completo muestra el caso habitual con un valor pequeño.

Ejecuta este ejemplo autónomo:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

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

El programa imprime el valor convertido con el formato estándar de Java para float. El ejemplo es una clase Java completa con un punto de entrada, así que puedes compilarlo y ejecutarlo como un programa independiente. La conversión ocurre al asignar value a converted; la impresión solo muestra el valor resultante. Si la variable ya es de tipo int, la asignación directa es la forma más clara.

También puedes escribir float converted = (float) value;, pero el cast no cambia esta conversión. Es redundante al asignar de int a float y puede hacer pensar que Java exige un cast explícito en este caso. Usa la asignación directa, salvo que tengas otro motivo para hacer explícita la conversión para quienes lean tu código.

Usar floatValue() con un objeto Integer

Integer es la clase envoltorio de Java para el int primitivo. Si un valor ya está almacenado en un objeto Integer, floatValue() devuelve su valor como un float primitivo. Por ejemplo, la expresión Integer count = Integer.valueOf(56); float converted = count.floatValue(); convierte el valor envuelto. En este caso, floatValue() es un método de instancia llamado sobre count.

Este caso con un objeto envoltorio es distinto de la asignación directa de un primitivo descrita antes. Si la variable ya es un int, no hace falta llamar a un método de Integer: asigna directamente el primitivo. Si una API o una colección te proporciona un valor como Integer, llamar a floatValue() hace explícitas la conversión y la extracción del primitivo. Java también puede desenvolver un Integer al asignarlo a float, pero el método resulta útil si quieres mostrar dónde ocurre la conversión. El método no aumenta la precisión del tipo de destino: el resultado sigue siendo un float y tiene los mismos límites de precisión.

Entender los límites de precisión al convertir int a float

Aunque ambos tipos de Java usan 32 bits, representan los números de forma distinta. Un int representa exactamente todos los enteros dentro de su rango. Un float usa un signo, un exponente y una significanda; en valores finitos ordinarios, dispone de 24 bits de precisión en la significanda. Por eso puede representar exactamente todos los enteros solo dentro del intervalo continuo de −2^24 a 2^24. Más allá de ese intervalo, los valores representables quedan separados entre sí, y algunos enteros se redondean al valor float más cercano.

Esto no significa que todas las conversiones por encima de ese límite cambien el valor: algunos enteros mayores siguen siendo representables exactamente. Lo importante es que ya no se garantiza la representación exacta de todos los enteros. «Ampliación» describe la conversión de tipos en Java; no garantiza que el destino tenga suficiente precisión para conservar cada valor de origen.

Si tus cálculos o identificadores requieren valores enteros exactos en todo el rango de int, consérvalos como int o usa otro tipo entero exacto en vez de convertirlos a float. Si necesitas operaciones fraccionarias y puedes tolerar el redondeo en magnitudes grandes, float puede ser adecuado. Elige según la precisión que necesite tu aplicación y evita comparar un valor convertido grande como si siempre tuviera que ser igual al entero original en todos los casos.