Bonjour,

J'ai eu quelque chose d'assez déroutant.
Lors d'un import en base j'ai une erreur d'execution sur un PreparedStatement.setDouble.
En affichant le double avec un System.out.println j'obtiens NaN
réflexe:
je teste si le double est NaN ou pas....
comment?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
double value = resultat_d_un_calcul_tout_complique();
if (value==Double.NaN) {PreparedStatement.setDouble(1,value);}
else {PreparedStatement.setNull(1, Types.NUMERIC;}
et toujours la même erreur...
je me rend compte que
value==Double.Nan est toujours false malgré le fait que value soit bien NaN!

Je change le test avec celui là
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Double d = new Double(value);
if (d.equals(new Double(Double.NaN))) {PreparedStatement.setDouble(1,value);}
else {PreparedStatement.setNull(1, Types.NUMERIC;}
et à ce moment cela fonctionne...
Comment se fait-il que Double.NaN qui soit un double ne permette pas d'être comparé avec un double qui est Not a Number?
Alors que c'est possible en passant par l'objet...

Quelqu'un a-t-il une explication?
Merci....