2012-02-01 6 views
28

J'interroge une base de données et certains des résultats que j'obtiens sont NULL. Je mets ces valeurs à une variable avec un type de données de double. Appelons la variable "résultats". J'ai donc essayé de mettre en place une instruction if pour voir qu'elle est égale à Null, ce qui bien sûr ne fonctionnait pas. Voici le code que j'ai pour cette instruction if:Comment vérifier si un double est nul?

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

L'erreur que je reçois avec ce code est:

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

Existe-t-il un meilleur moyen de déterminer si c'est nul?

+1

Vous devez récupérer la valeur comme étant quelque chose qui peut effectivement être 'null', comme 'Double'.Les primitives ne peuvent pas être nulles. –

Répondre

26

Je vous recommande d'utiliser un double pas un double comme type alors vous vérifiez par rapport à null.

+9

Attention - déclarer simplement 'results' être' Double' au lieu de 'double' ne résoudra pas le problème. 'Double résultat = rs.getDouble();' n'attribuera ** jamais ** un 'null' à' results'. –

+0

Je trouve que cette réponse est utile pour le cas général de garder une trace si une valeur double a été initialisée ou non. –

+2

Mais ce n'était pas la question qui a été posée. Et dans le scénario sur lequel le PO pose des questions, cette solution ne fonctionnera tout simplement pas. –

6

Une double primitive en Java ne peut jamais être nulle. Il sera initialisé à 0.0 si aucune valeur n'a été donnée pour celui-ci (sauf lors de la déclaration d'une double variable locale et de ne pas assigner une valeur, mais cela produira une erreur de compilation).

Plus d'informations sur les valeurs primitives par défaut here.

+2

Ils ne seront initialisés à 0.0 que s'ils sont des variables d'instance. Sinon, ils n'ont aucune valeur, pas même null. –

+0

(ou variables de classe) – Thilo

+1

Selon les docs, cela se produit uniquement avec des variables locales, ce qui génère une erreur de compilation. Si vous ne pouvez pas compiler le code, il ne s'exécute jamais, donc un double ne peut jamais être nul ou n'a aucune valeur en cours d'exécution. J'ai mis à jour mon post de toute façon. – onit

4

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

-1

Je crois que Double.NaN pourrait être capable de couvrir cela. C'est la seule valeur 'nulle' que contient le double.

+0

non ce ne sera pas. Concept différent. –

4

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

44

Tout d'abord, un Java double ne peut pas être nul, et ne peut pas être comparé avec un Java null. si vous appelez ResultSet.getDouble(...), qui renvoie un double pas Double, le comportement documenté est qu'un NULL (Le type double est une (non-référence) primitive de type et les types primitifs ne peuvent pas être nuls.)

Ensuite, (à partir de la base de données) sera retourné comme zéro. (Voir javadoc lié ci-dessus.) Ce n'est pas utile si zéro est une valeur légitime pour cette colonne.

Ainsi, vos options sont:

La méthode getObject va fournir la valeur en tant que Double (en supposant que le type de colonne est double), et est documenté pour revenir null pour une valeur NULL. (Pour plus d'informations, this page documente les mappages par défaut des types SQL aux types Java, et donc le type réel que vous devez attendre getObject pour les distribuer.)

Questions connexes