Introducción
En este laboratorio, aprenderás cómo verificar si un número es un float en Java. Exploraremos diferentes técnicas, comenzando por verificar si un objeto es una instancia de la clase Float.
Luego aprenderás cómo analizar una cadena de texto (string) y convertirla en un float y, finalmente, cómo comparar valores de tipo float con valores de tipo double, comprendiendo las sutilezas y posibles trampas involucradas en estas operaciones.
Verificar instancia de la clase Float
En este paso, exploraremos la clase Float en Java y cómo crear y verificar instancias de esta clase. En Java, los tipos de datos primitivos como float tienen clases envolventes (wrapper classes) correspondientes, como Float. Estas clases envolventes proporcionan métodos útiles para trabajar con los tipos primitivos.
Primero, creemos un nuevo archivo Java llamado
FloatExample.javaen tu directorio~/project. Puedes hacer esto haciendo clic derecho en el Explorador de archivos de la izquierda y seleccionando "Nuevo archivo", luego escribiendoFloatExample.java.Abre el archivo
FloatExample.javaen el editor y agrega el siguiente código:public class FloatExample { public static void main(String[] args) { // Create a primitive float variable float primitiveFloat = 123.45f; // Create a Float object using the constructor Float objectFloat = new Float(primitiveFloat); // Verify if objectFloat is an instance of the Float class boolean isFloatInstance = objectFloat instanceof Float; // Print the result System.out.println("Is objectFloat an instance of Float? " + isFloatInstance); } }Analicemos las nuevas partes de este código:
float primitiveFloat = 123.45f;: Esta línea declara una variablefloatprimitiva y le asigna un valor. Lafal final es importante para indicar que se trata de un literal de tipofloat.Float objectFloat = new Float(primitiveFloat);: Esta línea crea un objetoFloatutilizando el constructor de la claseFloaty el valorfloatprimitivo.boolean isFloatInstance = objectFloat instanceof Float;: El operadorinstanceofse utiliza para verificar si un objeto es una instancia de una clase en particular. Aquí, verificamos siobjectFloates una instancia de la claseFloat. El resultado se almacena en una variable booleanaisFloatInstance.System.out.println("Is objectFloat an instance of Float? " + isFloatInstance);: Esta línea imprime el resultado de la verificación en la consola.
Guarda el archivo
FloatExample.java(Ctrl+S o Cmd+S).Ahora, compilemos el programa. Abre la Terminal en la parte inferior del WebIDE y asegúrate de estar en el directorio
~/project. Luego, ejecuta el siguiente comando:javac FloatExample.javaSi la compilación es exitosa, no deberías ver ninguna salida, y se creará un archivo
FloatExample.classen el directorio~/project.Finalmente, ejecuta el programa compilado utilizando el comando
java:java FloatExampleDeberías ver la siguiente salida:
Is objectFloat an instance of Float? trueEsta salida confirma que el objeto
objectFloatque creamos es, de hecho, una instancia de la claseFloat. Comprender la diferencia entre los tipos primitivos y sus clases envolventes es importante en Java.
Convertir una cadena de texto a float
En este paso, aprenderemos cómo convertir una representación de un número en formato String a un valor de tipo float en Java. Esta es una tarea común cuando se reciben datos numéricos en forma de texto, por ejemplo, a través de la entrada del usuario o al leer desde un archivo. La clase envolvente Float proporciona un método conveniente para esta conversión.
Abre nuevamente el archivo
FloatExample.javaen el editor.Reemplaza el código existente con el siguiente nuevo código:
public class FloatExample { public static void main(String[] args) { // Define a string containing a float value String floatString = "987.65"; // Parse the string to a float primitive float parsedFloatPrimitive = Float.parseFloat(floatString); // Parse the string to a Float object Float parsedFloatObject = Float.valueOf(floatString); // Print the results System.out.println("Parsed primitive float: " + parsedFloatPrimitive); System.out.println("Parsed Float object: " + parsedFloatObject); } }Veamos las nuevas partes:
String floatString = "987.65";: Definimos una variable de tipoStringque contiene la representación textual de un número de punto flotante.float parsedFloatPrimitive = Float.parseFloat(floatString);: El métodoFloat.parseFloat()es un método estático de la claseFloatque toma unaStringcomo entrada y devuelve un valor primitivo de tipofloat.Float parsedFloatObject = Float.valueOf(floatString);: El métodoFloat.valueOf()es otro método estático que también toma unaStringy devuelve un objeto de tipoFloat. Ambos métodos logran la conversión, pero uno devuelve un valor primitivo y el otro un objeto.
Guarda el archivo
FloatExample.java(Ctrl+S o Cmd+S).Compila el programa modificado en la Terminal:
javac FloatExample.javaNuevamente, si la compilación es exitosa, no habrá salida.
Ejecuta el programa compilado:
java FloatExampleDeberías ver la siguiente salida:
Parsed primitive float: 987.65 Parsed Float object: 987.65Esto demuestra cómo se puede convertir exitosamente una cadena de texto que contiene un número de punto flotante válido tanto en un valor primitivo de tipo
floatcomo en un objeto de tipoFloatutilizando los métodos de la claseFloat.Nota: Si la cadena de texto no contiene un número de punto flotante válido, estos métodos lanzarán una
NumberFormatException. Es importante manejar tales excepciones en aplicaciones del mundo real, pero para este ejemplo básico, asumimos que la cadena de entrada es válida.
Comparar float con double
En este paso, exploraremos cómo comparar valores de tipo float y double en Java. Tanto float como double se utilizan para representar números de punto flotante, pero double ofrece una mayor precisión que float. Comparar números de punto flotante puede ser complicado en ocasiones debido a posibles diferencias de precisión.
Abre el archivo
FloatExample.javaen el editor por última vez.Reemplaza el código existente con el siguiente código que demuestra cómo comparar
floatydouble:public class FloatExample { public static void main(String[] args) { // Define a float value float floatValue = 0.1f; // Define a double value double doubleValue = 0.1; // Compare using the equality operator (==) boolean areEqualUsingEquals = (floatValue == doubleValue); // Compare using the compareTo method (for Float objects) // First, convert primitive float to Float object Float floatObject = floatValue; // Convert primitive double to Double object (for comparison with Float object) Double doubleObject = doubleValue; // Note: Direct compareTo between Float and Double objects is not standard. // We usually compare their primitive values or convert one to the other type. // Let's compare the primitive values after casting the double to float. boolean areEqualUsingCast = (floatValue == (float) doubleValue); // Print the results System.out.println("Float value: " + floatValue); System.out.println("Double value: " + doubleValue); System.out.println("Are they equal using ==? " + areEqualUsingEquals); System.out.println("Are they equal after casting double to float? " + areEqualUsingCast); // A safer way to compare floating-point numbers is to check if the absolute difference is within a small tolerance. double tolerance = 0.000001; // Define a small tolerance boolean areEqualWithTolerance = Math.abs(floatValue - doubleValue) < tolerance; System.out.println("Are they equal within tolerance? " + areEqualWithTolerance); } }Analicemos el nuevo código:
float floatValue = 0.1f;: Definimos una variable de tipofloatcon el valor 0.1.double doubleValue = 0.1;: Definimos una variable de tipodoublecon el valor 0.1.boolean areEqualUsingEquals = (floatValue == doubleValue);: Utilizamos el operador de igualdad==para comparar directamente los valores defloatydouble.boolean areEqualUsingCast = (floatValue == (float) doubleValue);: Convertimos el valor dedoubleafloatantes de comparar. Esto puede dar lugar a resultados inesperados debido a la pérdida de precisión.double tolerance = 0.000001;: Definimos un valor pequeño llamado tolerancia.boolean areEqualWithTolerance = Math.abs(floatValue - doubleValue) < tolerance;: Una forma más robusta de comparar números de punto flotante es comprobar si la diferencia absoluta entre ellos es menor que un número muy pequeño (la tolerancia).Math.abs()calcula el valor absoluto.
Guarda el archivo
FloatExample.java(Ctrl+S o Cmd+S).Compila el programa en la Terminal:
javac FloatExample.javaEjecuta el programa compilado:
java FloatExampleDeberías ver una salida similar a esta:
Float value: 0.1 Double value: 0.1 Are they equal using ==? false Are they equal after casting double to float? true Are they equal within tolerance? trueObserva que comparar
floatValueydoubleValuedirectamente utilizando==da como resultadofalse. Esto se debe a que0.1no se puede representar exactamente en punto flotante binario, y las representaciones de0.1enfloatydoubleson ligeramente diferentes. Convertir eldoubleafloatantes de la comparación puede hacer que parezcan iguales en algunos casos, pero la forma más confiable de comparar números de punto flotante para determinar si son prácticamente iguales es comprobar si su diferencia está dentro de una pequeña tolerancia.
Resumen
En este laboratorio (lab), aprendimos cómo verificar si un número es un float en Java. Comenzamos explorando la clase envolvente Float y cómo crear y verificar instancias de esta clase utilizando el operador instanceof. Esto implicó crear un valor primitivo de tipo float y luego envolverlo en un objeto Float para demostrar el concepto de las clases envolventes y su relación con los tipos primitivos.
Luego, pasamos a analizar (parsear) una representación de un número en formato cadena de texto (string) a un objeto Float utilizando el método Float.parseFloat(). Este paso resaltó cómo manejar entradas de texto y convertirlas en tipos numéricos, una tarea común en la programación. Finalmente, examinamos las sutilezas de comparar valores de tipo Float con valores de tipo Double, comprendiendo el potencial de diferencias de precisión y la importancia de utilizar métodos de comparación adecuados o considerar una tolerancia para las comprobaciones de igualdad.



