81 votes

Pourquoi double.NaN n'est-il pas égal à lui-même ?

Quelqu'un peut-il m'expliquer cela ? En C#, double.NaN n'est pas égal à double.NaN.

bool huh = double.NaN == double.NaN; // huh = false
bool huh2 = double.NaN >= 0; // huh2 = false
bool huh3 = double.NaN <= 0; // huh3 = false

Quelle constante puis-je comparer à un double.NaN et obtenir vrai ?

130voto

Erich Mirabal Points 6029

Si vous êtes curieux, voici ce que Double.IsNaN ressemble :

public static bool IsNaN(double d)
{
    return (d != d);
}

Funky, hein ?

44voto

Adrian Godong Points 5367

Utilice Double.IsNaN .

16voto

Francis B. Points 4109
bool isNaN = Double.IsNaN(yourNumber)

10voto

Miky Dinescu Points 22380

Ce comportement est délibéré. La raison étant que NaN représente quelque chose qui n'est pas un nombre et donc c'est une sorte de fourre-tout pour beaucoup de choses.

La manière correcte de comparer quelque chose à NaN est d'utiliser la fonction IsNaN fonction.

7voto

Colin Mackay Points 9303

Utilice Double.IsNan() pour tester l'égalité ici. La raison en est que NaN n'est pas un nombre.

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