Introduction
Dans ce laboratoire (lab), vous apprendrez à vérifier si un nombre est un nombre à virgule flottante (float) en Java. Nous explorerons différentes techniques, en commençant par vérifier si un objet est une instance de la classe Float.
Vous apprendrez ensuite à convertir (parser) une chaîne de caractères en un nombre à virgule flottante (float) et enfin, à comparer des valeurs de type nombre à virgule flottante (float) avec des valeurs de type nombre à double précision (double), en comprenant les subtilités et les pièges potentiels liés à ces opérations.
Vérifier l'instance de la classe Float
Dans cette étape, nous allons explorer la classe Float en Java et apprendre à créer et vérifier des instances de cette classe. En Java, les types de données primitifs comme float ont des classes d'emballage (wrapper classes) correspondantes, telles que Float. Ces classes d'emballage offrent des méthodes utiles pour travailler avec les types primitifs.
Tout d'abord, créons un nouveau fichier Java nommé
FloatExample.javadans votre répertoire~/project. Vous pouvez le faire en cliquant avec le bouton droit dans l'explorateur de fichiers à gauche et en sélectionnant "Nouveau fichier", puis en tapantFloatExample.java.Ouvrez le fichier
FloatExample.javadans l'éditeur et ajoutez le code suivant :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); } }Analysons les nouvelles parties de ce code :
float primitiveFloat = 123.45f;: Cette ligne déclare une variable primitivefloatet lui assigne une valeur. Lefà la fin est important pour indiquer qu'il s'agit d'un littéral de typefloat.Float objectFloat = new Float(primitiveFloat);: Cette ligne crée un objetFloaten utilisant le constructeur de la classeFloatet la valeur primitivefloat.boolean isFloatInstance = objectFloat instanceof Float;: L'opérateurinstanceofest utilisé pour vérifier si un objet est une instance d'une classe particulière. Ici, nous vérifions siobjectFloatest une instance de la classeFloat. Le résultat est stocké dans une variable booléenneisFloatInstance.System.out.println("Is objectFloat an instance of Float? " + isFloatInstance);: Cette ligne affiche le résultat de la vérification dans la console.
Enregistrez le fichier
FloatExample.java(Ctrl+S ou Cmd+S).Maintenant, compilons le programme. Ouvrez le terminal en bas de l'IDE Web et assurez-vous que vous êtes dans le répertoire
~/project. Ensuite, exécutez la commande suivante :javac FloatExample.javaSi la compilation réussit, vous ne devriez voir aucun message de sortie, et un fichier
FloatExample.classsera créé dans le répertoire~/project.Enfin, exécutez le programme compilé en utilisant la commande
java:java FloatExampleVous devriez voir la sortie suivante :
Is objectFloat an instance of Float? trueCette sortie confirme que l'objet
objectFloatque nous avons créé est bien une instance de la classeFloat. Comprendre la différence entre les types primitifs et leurs classes d'emballage est important en Java.
Convertir une chaîne de caractères en float
Dans cette étape, nous allons apprendre à convertir une représentation sous forme de chaîne de caractères (String) d'un nombre en une valeur de type nombre à virgule flottante (float) en Java. C'est une tâche courante lorsque vous recevez des entrées numériques sous forme de texte, par exemple, à partir d'une saisie utilisateur ou en lisant un fichier. La classe d'emballage (wrapper class) Float fournit une méthode pratique pour effectuer cette conversion.
Ouvrez à nouveau le fichier
FloatExample.javadans l'éditeur.Remplacez le code existant par le nouveau code suivant :
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); } }Examinons les nouvelles parties :
String floatString = "987.65";: Nous définissons une variable de typeStringqui contient la représentation textuelle d'un nombre à virgule flottante.float parsedFloatPrimitive = Float.parseFloat(floatString);: La méthodeFloat.parseFloat()est une méthode statique de la classeFloatqui prend une chaîne de caractères (String) en entrée et renvoie une valeur primitive de typefloat.Float parsedFloatObject = Float.valueOf(floatString);: La méthodeFloat.valueOf()est une autre méthode statique qui prend également une chaîne de caractères (String) et renvoie un objet de typeFloat. Les deux méthodes effectuent la conversion, mais l'une renvoie une valeur primitive et l'autre un objet.
Enregistrez le fichier
FloatExample.java(Ctrl+S ou Cmd+S).Compilez le programme modifié dans le terminal :
javac FloatExample.javaEncore une fois, si la compilation réussit, il n'y aura pas de sortie.
Exécutez le programme compilé :
java FloatExampleVous devriez voir la sortie suivante :
Parsed primitive float: 987.65 Parsed Float object: 987.65Cela montre comment vous pouvez convertir avec succès une chaîne de caractères contenant un nombre à virgule flottante valide en une valeur primitive
floatet en un objetFloaten utilisant les méthodes de la classeFloat.Remarque : Si la chaîne de caractères ne contient pas un nombre à virgule flottante valide, ces méthodes lanceront une exception
NumberFormatException. Il est important de gérer de telles exceptions dans les applications réelles, mais pour cet exemple de base, nous supposons que la chaîne d'entrée est valide.
Comparer un float avec un double
Dans cette étape, nous allons explorer comment comparer des valeurs de type float et double en Java. Les types float et double sont tous deux utilisés pour représenter des nombres à virgule flottante, mais le type double offre une précision supérieure à celle du type float. La comparaison de nombres à virgule flottante peut parfois être délicate en raison des différences potentielles de précision.
Ouvrez le fichier
FloatExample.javadans l'éditeur une dernière fois.Remplacez le code existant par le code suivant qui montre comment comparer des valeurs
floatetdouble: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); } }Examinons le nouveau code :
float floatValue = 0.1f;: Nous définissons une variable de typefloatavec la valeur 0,1.double doubleValue = 0.1;: Nous définissons une variable de typedoubleavec la valeur 0,1.boolean areEqualUsingEquals = (floatValue == doubleValue);: Nous utilisons l'opérateur d'égalité==pour comparer directement les valeursfloatetdouble.boolean areEqualUsingCast = (floatValue == (float) doubleValue);: Nous convertissons (castons) la valeurdoubleenfloatavant de comparer. Cela peut parfois entraîner des résultats inattendus en raison de la perte de précision.double tolerance = 0.000001;: Nous définissons une petite valeur appelée tolérance.boolean areEqualWithTolerance = Math.abs(floatValue - doubleValue) < tolerance;: Une méthode plus robuste pour comparer des nombres à virgule flottante consiste à vérifier si la différence absolue entre eux est inférieure à un très petit nombre (la tolérance).Math.abs()calcule la valeur absolue.
Enregistrez le fichier
FloatExample.java(Ctrl+S ou Cmd+S).Compilez le programme dans le terminal :
javac FloatExample.javaExécutez le programme compilé :
java FloatExampleVous devriez voir une sortie similaire à celle-ci :
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? trueNotez que la comparaison directe de
floatValueetdoubleValueà l'aide de l'opérateur==donnefalse. Cela s'explique par le fait que le nombre 0,1 ne peut pas être représenté de manière exacte en virgule flottante binaire, et les représentationsfloatetdoublede 0,1 sont légèrement différentes. La conversion (casting) dudoubleenfloatavant la comparaison peut parfois faire apparaître les valeurs comme égales, mais la méthode la plus fiable pour comparer des nombres à virgule flottante en pratique consiste à vérifier si leur différence est inférieure à une petite tolérance.
Résumé
Dans ce laboratoire (lab), nous avons appris à vérifier si un nombre est de type float en Java. Nous avons commencé par explorer la classe d'emballage (wrapper class) Float et à découvrir comment créer et vérifier des instances de cette classe à l'aide de l'opérateur instanceof. Cela a impliqué la création d'une valeur primitive de type float, puis son encapsulation dans un objet Float pour illustrer le concept des classes d'emballage et leur relation avec les types primitifs.
Ensuite, nous avons passé à l'étape de la conversion d'une représentation sous forme de chaîne de caractères d'un nombre en un objet Float en utilisant la méthode Float.parseFloat(). Cette étape a mis en évidence comment gérer les entrées sous forme de chaînes de caractères et les convertir en types numériques, une tâche courante en programmation. Enfin, nous avons examiné les subtilités de la comparaison de valeurs de type Float avec des valeurs de type Double, en comprenant le potentiel de différences de précision et l'importance d'utiliser des méthodes de comparaison appropriées ou de prendre en compte une tolérance pour les vérifications d'égalité.



