2010-01-19 4 views
1

Il existe donc une méthode pour NaN, mais la division par zéro crée l'infini ou l'infini négatif.Existe-t-il une méthode pour savoir si un double est un nombre réel en C#?

Il existe une méthode pour l'infini (également l'infini positif et l'infini négatif).

Ce que je veux, c'est la fonction IsARealNumber qui renvoie true lorsque la valeur est un nombre exprimable.

Il est évident que je peux écrire mon propre ...

public bool IsARealNumber(double test) 
{ 
    if (double.IsNaN(test)) return false; 
    if (double.IsInfinity(test)) return false; 
    return true; 
} 

mais il ne semble pas que je devrais le faire.

+2

Cela me semble plutôt simple: return! Double.IsNaN (test) &&! Double.IsInfinity (test); // Dans le framework 3.5, vous pouvez même en faire une méthode d'extension. – GalacticCowboy

+2

Et maintenant que vous l'avez écrit, vous ne devrez plus jamais l'écrire à nouveau :-) – paxdiablo

+0

ne semble-t-il pas qu'il devrait être là? @GalacticCowboy, je viens de remarquer les méthodes d'extension, comment l'ajouter? –

Répondre

5

Pour l'ajouter en tant que méthode d'extension, il doit s'agir d'un membre statique d'une classe statique.

public static class ExtensionMethods 
{ 
    public static bool IsARealNumber(this double test) 
    { 
     return !double.IsNaN(test) && !double.IsInfinity(test); 
    } 
} 
+0

génial, merci. –

+0

Ai-je raison de supposer que vous ne pouvez ajouter ces extensionsMethods aux objets, et ne pas les accrocher de la classe proprement dite. Comme double.IsNaN (double) est? –

+0

Je crois que c'est correct. Il utilise le type du paramètre "this" pour déterminer à quoi il s'applique, et je doute qu'il soit autorisé à être statique (de manière à l'exclure de la classe en tant que membre statique). – GalacticCowboy

Questions connexes