Comment vérifier si un nombre est un float en Java

JavaJavaBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/BasicSyntaxGroup -.-> java/data_types("Data Types") java/BasicSyntaxGroup -.-> java/math("Math") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("Exceptions") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/wrapper_classes("Wrapper Classes") java/SystemandDataProcessingGroup -.-> java/math_methods("Math Methods") java/SystemandDataProcessingGroup -.-> java/string_methods("String Methods") subgraph Lab Skills java/data_types -.-> lab-559956{{"Comment vérifier si un nombre est un float en Java"}} java/math -.-> lab-559956{{"Comment vérifier si un nombre est un float en Java"}} java/classes_objects -.-> lab-559956{{"Comment vérifier si un nombre est un float en Java"}} java/exceptions -.-> lab-559956{{"Comment vérifier si un nombre est un float en Java"}} java/wrapper_classes -.-> lab-559956{{"Comment vérifier si un nombre est un float en Java"}} java/math_methods -.-> lab-559956{{"Comment vérifier si un nombre est un float en Java"}} java/string_methods -.-> lab-559956{{"Comment vérifier si un nombre est un float en Java"}} end

Vérifier une 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.

  1. Tout d'abord, créons un nouveau fichier Java nommé FloatExample.java dans 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 tapant FloatExample.java.

  2. Ouvrez le fichier FloatExample.java dans 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 primitive float et lui assigne une valeur. Le f à la fin est important pour indiquer qu'il s'agit d'un littéral de type float.
    • Float objectFloat = new Float(primitiveFloat); : Cette ligne crée un objet Float en utilisant le constructeur de la classe Float et la valeur primitive float.
    • boolean isFloatInstance = objectFloat instanceof Float; : L'opérateur instanceof est utilisé pour vérifier si un objet est une instance d'une classe particulière. Ici, nous vérifions si objectFloat est une instance de la classe Float. Le résultat est stocké dans une variable booléenne isFloatInstance.
    • System.out.println("Is objectFloat an instance of Float? " + isFloatInstance); : Cette ligne affiche le résultat de la vérification dans la console.
  3. Enregistrez le fichier FloatExample.java (Ctrl+S ou Cmd+S).

  4. 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.java

    Si la compilation réussit, vous ne devriez voir aucun message de sortie, et un fichier FloatExample.class sera créé dans le répertoire ~/project.

  5. Enfin, exécutez le programme compilé en utilisant la commande java :

    java FloatExample

    Vous devriez voir la sortie suivante :

    Is objectFloat an instance of Float? true

    Cette sortie confirme que l'objet objectFloat que nous avons créé est bien une instance de la classe Float. 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 nombre à virgule flottante (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.

  1. Ouvrez à nouveau le fichier FloatExample.java dans l'éditeur.

  2. 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 type String qui contient la représentation textuelle d'un nombre à virgule flottante.
    • float parsedFloatPrimitive = Float.parseFloat(floatString); : La méthode Float.parseFloat() est une méthode statique de la classe Float qui prend une chaîne de caractères (String) en entrée et renvoie une valeur primitive de type float.
    • Float parsedFloatObject = Float.valueOf(floatString); : La méthode Float.valueOf() est une autre méthode statique qui prend également une chaîne de caractères (String) et renvoie un objet de type Float. Les deux méthodes effectuent la conversion, mais l'une renvoie une valeur primitive et l'autre un objet.
  3. Enregistrez le fichier FloatExample.java (Ctrl+S ou Cmd+S).

  4. Compilez le programme modifié dans le terminal :

    javac FloatExample.java

    Encore une fois, si la compilation réussit, il n'y aura pas de sortie.

  5. Exécutez le programme compilé :

    java FloatExample

    Vous devriez voir la sortie suivante :

    Parsed primitive float: 987.65
    Parsed Float object: 987.65

    Cela montre comment vous pouvez convertir avec succès une chaîne de caractères contenant un nombre à virgule flottante valide en une valeur primitive float et en un objet Float en utilisant les méthodes de la classe Float.

    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 des valeurs float et 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.

  1. Ouvrez le fichier FloatExample.java dans l'éditeur une dernière fois.

  2. Remplacez le code existant par le code suivant qui montre comment comparer des valeurs float et double :

    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 type float avec la valeur 0,1.
    • double doubleValue = 0.1; : Nous définissons une variable de type double avec la valeur 0,1.
    • boolean areEqualUsingEquals = (floatValue == doubleValue); : Nous utilisons l'opérateur d'égalité == pour comparer directement les valeurs float et double.
    • boolean areEqualUsingCast = (floatValue == (float) doubleValue); : Nous convertissons (castons) la valeur double en float avant 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.
  3. Enregistrez le fichier FloatExample.java (Ctrl+S ou Cmd+S).

  4. Compilez le programme dans le terminal :

    javac FloatExample.java
  5. Exécutez le programme compilé :

    java FloatExample

    Vous 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? true

    Notez que la comparaison directe de floatValue et doubleValue à l'aide de l'opérateur == donne false. 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ésentations float et double de 0,1 sont légèrement différentes. La conversion (casting) du double en float avant 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é.