Introdução
Neste laboratório, você aprenderá como verificar se um número é um float em Java. Exploraremos diferentes técnicas, começando por verificar se um objeto é uma instância da classe Float.
Em seguida, você aprenderá como converter uma string em um float e, finalmente, como comparar valores float com valores double, compreendendo as nuances e as potenciais armadilhas envolvidas nessas operações.
Verificar Instância da Classe Float
Nesta etapa, exploraremos a classe Float em Java e como criar e verificar instâncias dessa classe. Em Java, tipos de dados primitivos como float têm classes wrapper correspondentes, como Float. Essas classes wrapper fornecem métodos úteis para trabalhar com os tipos primitivos.
Primeiro, vamos criar um novo arquivo Java chamado
FloatExample.javano seu diretório~/project. Você pode fazer isso clicando com o botão direito no Explorador de Arquivos à esquerda e selecionando "Novo Arquivo", depois digitandoFloatExample.java.Abra o arquivo
FloatExample.javano editor e adicione o seguinte 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); } }Vamos detalhar as novas partes deste código:
float primitiveFloat = 123.45f;: Esta linha declara uma variávelfloatprimitiva e atribui um valor a ela. Ofno final é importante para indicar que este é um literalfloat.Float objectFloat = new Float(primitiveFloat);: Esta linha cria um objetoFloatusando o construtor da classeFloate o valorfloatprimitivo.boolean isFloatInstance = objectFloat instanceof Float;: O operadorinstanceofé usado para verificar se um objeto é uma instância de uma classe específica. Aqui, verificamos seobjectFloaté uma instância da classeFloat. O resultado é armazenado em uma variável booleanaisFloatInstance.System.out.println("Is objectFloat an instance of Float? " + isFloatInstance);: Esta linha imprime o resultado da verificação no console.
Salve o arquivo
FloatExample.java(Ctrl+S ou Cmd+S).Agora, vamos compilar o programa. Abra o Terminal na parte inferior da WebIDE e certifique-se de que você está no diretório
~/project. Em seguida, execute o seguinte comando:javac FloatExample.javaSe a compilação for bem-sucedida, você não deverá ver nenhuma saída, e um arquivo
FloatExample.classserá criado no diretório~/project.Finalmente, execute o programa compilado usando o comando
java:java FloatExampleVocê deverá ver a seguinte saída:
Is objectFloat an instance of Float? trueEsta saída confirma que o
objectFloatque criamos é de fato uma instância da classeFloat. Compreender a diferença entre tipos primitivos e suas classes wrapper é importante em Java.
Converter String para Float
Nesta etapa, aprenderemos como converter uma representação String de um número em um valor float em Java. Esta é uma tarefa comum quando você recebe entrada numérica como texto, por exemplo, da entrada do usuário ou da leitura de um arquivo. A classe wrapper Float fornece um método conveniente para esta conversão.
Abra o arquivo
FloatExample.javano editor novamente.Substitua o código existente pelo seguinte código novo:
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); } }Vamos analisar as novas partes:
String floatString = "987.65";: Definimos uma variávelStringque contém a representação textual de um número de ponto flutuante.float parsedFloatPrimitive = Float.parseFloat(floatString);: O métodoFloat.parseFloat()é um método estático da classeFloatque recebe umaStringcomo entrada e retorna um valorfloatprimitivo.Float parsedFloatObject = Float.valueOf(floatString);: O métodoFloat.valueOf()é outro método estático que também recebe umaStringe retorna um objetoFloat. Ambos os métodos realizam a conversão, mas um retorna um primitivo e o outro retorna um objeto.
Salve o arquivo
FloatExample.java(Ctrl+S ou Cmd+S).Compile o programa modificado no Terminal:
javac FloatExample.javaNovamente, se for bem-sucedido, não haverá saída.
Execute o programa compilado:
java FloatExampleVocê deverá ver a seguinte saída:
Parsed primitive float: 987.65 Parsed Float object: 987.65Isso demonstra como você pode converter com sucesso uma string contendo um número de ponto flutuante válido em um
floatprimitivo e em um objetoFloatusando os métodos da classeFloat.Nota: Se a string não contiver um número de ponto flutuante válido, esses métodos lançarão uma
NumberFormatException. É importante lidar com essas exceções em aplicações do mundo real, mas para este exemplo básico, assumimos que a string de entrada é válida.
Comparar Float com Double
Nesta etapa, exploraremos como comparar valores float e double em Java. Tanto float quanto double são usados para representar números de ponto flutuante, mas double oferece maior precisão do que float. Comparar números de ponto flutuante pode, às vezes, ser complicado devido a potenciais diferenças de precisão.
Abra o arquivo
FloatExample.javano editor pela última vez.Substitua o código existente pelo seguinte código que demonstra a comparação de
floatedouble: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); } }Vamos examinar o novo código:
float floatValue = 0.1f;: Definimos uma variávelfloatcom o valor 0.1.double doubleValue = 0.1;: Definimos uma variáveldoublecom o valor 0.1.boolean areEqualUsingEquals = (floatValue == doubleValue);: Usamos o operador de igualdade==para comparar os valoresfloatedoublediretamente.boolean areEqualUsingCast = (floatValue == (float) doubleValue);: Convertemos odoubleValuepara umfloatantes de comparar. Isso pode, às vezes, levar a resultados inesperados devido à perda de precisão.double tolerance = 0.000001;: Definimos um pequeno valor chamado tolerância.boolean areEqualWithTolerance = Math.abs(floatValue - doubleValue) < tolerance;: Uma maneira mais robusta de comparar números de ponto flutuante é verificar se a diferença absoluta entre eles é menor que um número muito pequeno (a tolerância).Math.abs()calcula o valor absoluto.
Salve o arquivo
FloatExample.java(Ctrl+S ou Cmd+S).Compile o programa no Terminal:
javac FloatExample.javaExecute o programa compilado:
java FloatExampleVocê deverá ver uma saída semelhante 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? trueObserve que a comparação de
floatValueedoubleValuediretamente usando==resulta emfalse. Isso ocorre porque0.1não pode ser representado exatamente em ponto flutuante binário, e as representaçõesfloatedoublede0.1são ligeiramente diferentes. Converter odoubleparafloatantes da comparação pode fazê-los parecer iguais em alguns casos, mas a maneira mais confiável de comparar números de ponto flutuante para igualdade prática é verificar se sua diferença está dentro de uma pequena tolerância.
Resumo
Neste laboratório, aprendemos como verificar se um número é um float em Java. Começamos explorando a classe wrapper Float e como criar e verificar instâncias dessa classe usando o operador instanceof. Isso envolveu a criação de um float primitivo e, em seguida, encapsulá-lo em um objeto Float para demonstrar o conceito de classes wrapper e sua relação com tipos primitivos.
Em seguida, passamos para a análise de uma representação string de um número em um Float usando o método Float.parseFloat(). Esta etapa destacou como lidar com entradas de string e convertê-las em tipos numéricos, uma tarefa comum em programação. Finalmente, examinamos as nuances da comparação de valores Float com valores Double, compreendendo o potencial de diferenças de precisão e a importância de usar métodos de comparação apropriados ou considerar uma tolerância para verificações de igualdade.



