[JAVA] Faites attention à la vérification des limites de la valeur d'entrée lors de l'utilisation du type float

En premier

Je viens de le trouver sur float, et je pense que la même chose se produira si vous vérifiez la valeur sur double.

Code de test

public class Main {
    public static void main(String[] args) throws Exception {

        System.out.println("Float.parseFloat(999999967)  --> " + Float.parseFloat("999999967"));
        System.out.println("Float.parseFloat(999999968)  --> " + Float.parseFloat("999999968"));
        System.out.println("Float.parseFloat(999999969)  --> " + Float.parseFloat("999999969"));
        System.out.println("Float.parseFloat(999999999)  --> " + Float.parseFloat("999999999"));
        System.out.println("Float.parseFloat(1000000000) --> " + Float.parseFloat("1000000000"));
        System.out.println("Float.parseFloat(1000000001) --> " + Float.parseFloat("1000000001"));
        System.out.println("Float.parseFloat(1000000010) --> " + Float.parseFloat("1000000010"));
        System.out.println("Float.parseFloat(1000000020) --> " + Float.parseFloat("1000000020"));
        System.out.println("Float.parseFloat(1000000030) --> " + Float.parseFloat("1000000030"));
        System.out.println("Float.parseFloat(1000000031) --> " + Float.parseFloat("1000000031"));
        System.out.println("Float.parseFloat(1000000032) --> " + Float.parseFloat("1000000032"));
        System.out.println("Float.parseFloat(1000000033) --> " + Float.parseFloat("1000000033"));
        System.out.println("Float.parseFloat(1000000034) --> " + Float.parseFloat("1000000034"));
        System.out.println("Float.parseFloat(1000000035) --> " + Float.parseFloat("1000000035"));
        System.out.println("Float.parseFloat(1000000040) --> " + Float.parseFloat("1000000040"));
 
    }

}

Résultat d'exécution

Float.parseFloat(999999967)  --> 9.9999994E8
Float.parseFloat(999999968)  --> 1.0E9
Float.parseFloat(999999969)  --> 1.0E9
Float.parseFloat(999999999)  --> 1.0E9
Float.parseFloat(1000000000) --> 1.0E9
Float.parseFloat(1000000001) --> 1.0E9
Float.parseFloat(1000000010) --> 1.0E9
Float.parseFloat(1000000020) --> 1.0E9
Float.parseFloat(1000000030) --> 1.0E9
Float.parseFloat(1000000031) --> 1.0E9
Float.parseFloat(1000000032) --> 1.0E9
Float.parseFloat(1000000033) --> 1.00000006E9
Float.parseFloat(1000000034) --> 1.00000006E9
Float.parseFloat(1000000035) --> 1.00000006E9
Float.parseFloat(1000000040) --> 1.00000006E9

URL de vérification du fonctionnement sur le Web

https://paiza.io/projects/KMTyqbyvAG1M_8KslEVWiQ

Résumé

Si 999 999 999 et 1 000 000 000 sont convertis en flottant, ils auront la même valeur. Non seulement cela, 999 999 968 à 1 000 000 032 sont considérés comme la même valeur.

C'est un exemple que vous devez être prudent lorsque vous effectuez une vérification, par exemple si vous voulez faire une erreur si vous entrez une valeur supérieure à 999 999 999 (= 1 000 000 000). Dans cet exemple, il existe deux choix, double ou BigDecimal, et il est préférable d'utiliser BigDecimal si possible.

Recommended Posts

Faites attention à la vérification des limites de la valeur d'entrée lors de l'utilisation du type float
Comment afficher 0 sur le côté gauche de la valeur d'entrée standard
[Rails] Parlez de prêter attention à la valeur de retour de l'endroit
Ce que j'ai pensé en passant la valeur d'entrée de l'utilisateur à la classe Service
Développement Android, comment vérifier null dans la valeur de l'objet JSON
Comment afficher le résultat du remplissage du formulaire
Comparaison de vitesse lorsque le côté valeur de Hash veut tout récupérer avec un tableau
Comment obtenir le nom de classe de l'argument de LoggerFactory.getLogger lors de l'utilisation de SLF4J en Java
Spring 4.2 vs 4.3: Différence de valeur de liaison au type de collection lors de la soumission case à cocher vide
Exemple de code pour attribuer une valeur dans le fichier de propriétés à un champ du type attendu
Quand le survol d'Eclipse est difficile à voir
[Java] Comment obtenir la valeur maximale de HashMap
Rails6: saisissez les données initiales d'ActionText à l'aide de seed
Lorsque vous utilisez le constructeur de la classe Date de Java, la date avance de 1900.
Commande pour vérifier le nombre et l'état des threads Java
Vérifiez l'état des applications Java sans utiliser d'outils de surveillance
[Java] Pour connaître les informations de type des paramètres de type à l'exécution
Comment modifier la valeur de réglage de Springboot Hikari CP
[Swift] Obtenez le moment où la valeur de textField est modifiée
L'histoire de la transmission de Java à Heroku à l'aide du pipeline BitBucket
Comment vérifier l'extension et la taille des fichiers téléchargés
[Apache Tomcat] L'histoire de l'utilisation d'Apache OpenWebBeans pour activer CDI
[Rails] Comment convertir l'URI de l'image envoyée par http en https lors de l'utilisation de l'API Twitter
Connaître la commodité de Docker (-compose) maintenant (liste d'informations auxquelles j'ai fait référence lors de son utilisation)
Je veux rendre le cadre de la zone de texte rouge lorsqu'il y a une erreur de saisie
Emplacement de la définition de la méthode Résumé de la vérification Lorsque défini dans le projet et Rails / Gem