45 votes

Comment vérifier si un double est nul?

Je fais une requête à une base de données et certains des résultats que j'obtiens sont nuls. Je définis ces valeurs sur une variable de type double. Appelons cette variable "résultats". J'ai donc essayé de mettre en place une instruction if pour vérifier si elle est nulle, ce qui n'a évidemment pas fonctionné. Voici le code que j'ai pour cette instruction if :

if (results == null)
{
     results = 0;
}

L'erreur que j'obtiens avec ce code est :

L'opérateur == est indéfini pour le(s) type(s) d'argument double, null

Y a-t-il un meilleur moyen de déterminer s'il est nul ?

58voto

Stephen C Points 255558

Tout d'abord, un double Java ne peut pas être un null en Java, et ne peut pas être comparé à null. (Le type double est un type primitif (non-référence) et les types primitifs ne peuvent pas être null.) Je pars donc du principe suivant :

  • Le "null" que vous essayez de détecter est un NULL stocké dans la base de données que vous interrogez.
  • Vous utilisez JDBC pour interroger la base de données.

Si vous appelez ResultSet.getDouble(...), cela renvoie un double et non un Double, le comportement documenté est qu'un NULL (provenant de la base de données) sera renvoyé comme zéro. (Voir la javadoc liée ci-dessus.) Ce n'est pas utile si zéro est une valeur légitime pour cette colonne.

Changer le type déclaré de résultat en Double au lieu de double comme suggéré par la réponse de Toby ne sera pas utile. Lorsque la base de données contient un NULL, la valeur attribuée à résultat sera un Double(0.0), et non un null.

Voici deux options qui fonctionneront :

La méthode getObject renverra une valeur (non-NULL) en tant que Double (en supposant que le type de colonne soit double). Il est documenté de renvoyer null pour un NULL. (Pour plus d'informations, cette page documente les mappings par défaut des types SQL vers les types Java, et donc le type réel que vous devriez attendre de la méthode getObject.)

44voto

Toby Samples Points 2110

Je recommanderais d'utiliser un Double plutôt qu'un double comme type, puis vous vérifiez contre null.

7voto

onit Points 2820

Un primitif double en Java ne peut jamais être null. Il sera initialisé à 0.0 s'il n'a pas de valeur donnée (sauf lorsque vous déclarez une variable double locale et ne lui attribuez pas de valeur, mais cela produira une erreur de compilation).

Plus d'informations sur les valeurs primitifs par défaut ici.

6voto

danben Points 35312

Pour dire que quelque chose "est nul" signifie qu'il s'agit d'une référence à la valeur nulle. Les types primitifs (int, double, float, etc.) ne sont pas des types de référence par définition, donc ils ne peuvent pas avoir de valeurs nulles. Vous devrez savoir ce que fera votre wrapper de base de données dans ce cas.

3voto

RAY Points 1622

Comment obtenez-vous la valeur de "results"? L'obtenez-vous via ResultSet.getDouble()? Dans ce cas, vous pouvez vérifier ResultSet.wasNull().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X