IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[c#] IsNumeric existe?


Sujet :

C#

  1. #1
    Membre expérimenté
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Billets dans le blog
    4
    Par défaut [c#] IsNumeric existe?
    Bien le bonjour,
    Je tombe sur un cas très bête, mais.. je ne trouve nul part la fonction IsNumeric en c#. 30minutes de recherches plus tard, beaucoup de discution avec mon patron et mon collègues et j'en viens à vous poser la question parce que ça me parait étrange qu'en c# il n'y ait pas de fonction IsNumeric. Si elle existe, quel namespace il faut importer. J'ai lut des truc comme utiliser un 'try catch' ou importer le IsNumeric de VB# mais, je reste scèptique..

    Alors ma question en claire est : Existe-t-il une fonction IsNumeric en c# qui nécessite import de Namespace particulier?

    Cordialement,
    Lyche
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  2. #2
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 288
    Par défaut
    tu peux utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int.TryParse(String s)
     
    ou
     
    bool isNumeric = Char.IsNumber('5');  // true
    Ca te permet de savoir si une chaine de caractère est un integer

  3. #3
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 288
    Par défaut
    Ou sinon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    using Microsoft.VisualBasic;
     
    bool isNumber = Information.IsNumeric("123");

  4. #4
    Nip
    Nip est déconnecté
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    963
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 963
    Par défaut
    Ou encore regex + extension method

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public static bool IsNumeric(this string valueToCheck)
    {
        Regex regex = new Regex(@"^[-+]?\d*[.,]?\d*$");
        return regex.IsMatch(valueToCheck);
    }

  5. #5
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Il y a juste qu'il faut pas oublier que les méthodes d'extension c'est du 3.5

  6. #6
    Membre expérimenté
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Billets dans le blog
    4
    Par défaut
    Merci pour ces différentes réponses.
    ça ne résoud pas le problème que mon patron ne me crois pas "c# ne peut pas ne pas avoir de fonction IsNumeric" d'après lui.. et ça m'êmbête parce que quand il a une idée en tête il l'a pas dans les chaussures.
    bref, merci encore

    Cordialement,
    Lyche
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  7. #7
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Moi je te propose de faire un pari avec ton patron !

    S'il trouve UNE fonction native en cSharp qui te rends a tout les coups true si ta chaine est numerique
    Sachant que tu autorise
    1- les '+' et '-' devant
    2- les points ou les virgules

    Alors tu lui paye une bouteille de champagne
    Sinon il t'augmente de 10 %

  8. #8
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Comme ecrit ci-dessus,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int.TryParse(laChaine, out result)
    double.TryParse(laChaine, out result)
    sans compter les surcharges qui permettent de choisir dans quelle culture on doit essayer de parser. cf http://msdn.microsoft.com/en-us/library/f02979c7.aspx

    J'ai droit au champagne ?

  9. #9
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Bien essayé Guulh

    Le champagne c'est pas pour aujourd'hui !

    J'ai dit

    S'il trouve UNE fonction native
    Pour moi le fait de devoir essayer le TryParse en int, en double etc

    Tenant compte aussi
    que

    "- 128"

    Ne sera pas reconnu

    Signifie qu'il n'y a pas UNE fonction sufisement générique qui permet de determiner qu'une chaine represente une valeur numerique.

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Lyche Voir le message
    ça ne résoud pas le problème que mon patron ne me crois pas "c# ne peut pas ne pas avoir de fonction IsNumeric" d'après lui...
    Ben il suffit de regarder dans la MSDN... il y a 2 méthodes IsNumeric :
    - Microsoft.VisualBasic.CompilerServices.Versioned.IsNumeric (mais This API supports the .NET Framework infrastructure and is not intended to be used directly from your code.)
    - Microsoft.VisualBasic.IsNumeric
    Evidemment c'est dans l'assembly Microsoft.VisualBasic, mais ça n'empêche pas de l'utiliser en C#...

    D'ailleurs je suis un peu perplexe en voyant le nombre de classes utiles qui ont été mises dans cet assembly, comme si ça ne pouvait pas être utilisé par d'autres langages...
    Par exemple TextFieldParser : je ne vois pas pourquoi ce n'est pas dans System.IO... Ou encore InputBox : de quel droit ce serait "réservé" à VB ??

  11. #11
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Ou encore InputBox : de quel droit ce serait "réservé" à VB ??
    Parce que ça existait qu'en VB6. C# est un langage différent et apparemment Microsoft ne veut pas qu'il y ait une quelconque ressemblance à visual basic. Par contre je suis pas d'accord sur le fait que qu'il faille utiliser les fonctionnalités du visual basic rien que pour savoir si une chaine contient des caractères numérique...

  12. #12
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Par contre je suis pas d'accord sur le fait que qu'il faille utiliser les fonctionnalités du visual basic rien que pour savoir si une chaine contient des caractères numérique...
    Par contre je pense que Lyche a tout intéret a ecrire une petite methode bien ficelée qui gerera les cas évoqués

    Pour ma part les TryParse sont insufisant si on veut faire un minimum de traitement intelligent dans le monde réel !

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par harz62 Voir le message
    Par contre je suis pas d'accord sur le fait que qu'il faille utiliser les fonctionnalités du visual basic rien que pour savoir si une chaine contient des caractères numérique...
    Non bien sûr, d'ailleurs j'aurais utilisé un TryParse... Ce que je veux dire, c'est qu'il y a pas mal de classes et de méthodes utiles en VB qui auraient aussi profité à C#, et ça m'agace de devoir toujours ajouter une référence à Microsoft.VisualBasic dans mes projets C# quand je veux les utiliser

  14. #14
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par olibara Voir le message
    Signifie qu'il n'y a pas UNE fonction sufisement générique qui permet de determiner qu'une chaine represente une valeur numerique.
    Oui, mais ca veut dire quoi, une chaine qui représente une valeur numérique ? L'idée de ce test, c'est bien de récupérer, à terme, le numérique correspondant, non ?
    Et si int, double, etc., c'est trop, y'a toujours decimal.TryParse
    Faudrait faire un petit coup de Reflector sur l'assembly VB, mais à mon humble avis cette méthode IsNumeric n'est qu'une relicat de l'époque VB6, laissée là pour faciliter les transitions vers VB.Net, mais qui ne sert à rien en C#, puisque l'on a une tripotée de méthodes plus puissantes à disposition.

    Pour ma part les TryParse sont insufisant si on veut faire un minimum de traitement intelligent dans le monde réel !
    Il manque quoi ?

  15. #15
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut Guulh


    Essaye


    "- 2834"
    " (125)"
    " 1245,41 €"
    " 13.4€"
    " + 41"

    Ca c'est le monde réel !
    Pas une abstraction dans un language

    Et dans le monde reel j'ai déja du réaliser une fonction qui pouvait digerer cela, dire que c'estait du numerique et en proposer la valeur !


    Aucun tryparse ne pourra le faire !

  16. #16
    Membre expérimenté
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Billets dans le blog
    4
    Par défaut
    Je pars tout un week end et y'a un roman sur mon topic en retour ^^ !
    Donc, si je comprend bien, c'est une volonté de Microsoft qu'il n'y ai pas de fonction "précise" autre que la fonction VB. Et si je veux faire cela en c# je dois développer moi même ma méthode IsNumeric... Bon, bah je vous remerci d'avoir participé à ce débàt (peut-être pas fini ^^) et je vais me lancer dans cette tache
    Bonne journée à tous.

    Cordialement,
    Lyche
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  17. #17
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Vive les surcharges de TryParse !
    http://msdn.microsoft.com/en-us/library/ew0seb73.aspx

    D'expérience : toujours préférer les solutions basées sur des méthodes documentées du FX (quand elles existent bien sûr). Parce que quand on hérite d'un projet, mieux vaut avoir à potasser la doc plutôt qu'à comprendre et éventuellement maintenir une solution propriétaire très probablement moins versatile

  18. #18
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par olibara Voir le message
    Salut Guulh


    Essaye


    "- 2834"
    " (125)"
    " 1245,41 €"
    " 13.4€"
    " + 41"

    Ca c'est le monde réel !
    Pas une abstraction dans un language

    Et dans le monde reel j'ai déja du réaliser une fonction qui pouvait digerer cela, dire que c'estait du numerique et en proposer la valeur !


    Aucun tryparse ne pourra le faire !
    Justement avec la surchage indiquée par Guulh ça devrait le faire... les membres de l'énumération NumberStyles semblent couvrir tous les cas que tu présentes : AllowLeadingWhite, AllowLeadingSign, AllowParentheses, AllowDecimalPoint, AllowCurrencySymbol...

  19. #19
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Ahah


    Je n'avais pas encore exploré cette surcharge
    Ca me semble déja plus comple !


    Merci Guuhl

  20. #20
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    De rien

    Les questions du style "mon code marche pas sur ma machine de prod, elle est en anglais, pourquoi ?" sont tellement fréquentes qu'on ne fera jamais trop la pub des ToString / Parse / TryParse et de leurs surcharges.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ADO] Tester l'existence d'une table
    Par nd25 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 05/09/2002, 13h55
  2. Check Url pour savoir si erreur 404 ou si le site existe
    Par Clément[Delphi] dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/08/2002, 13h49
  3. Existe-t'il un type tenant sur 2 octets ?
    Par benj63 dans le forum C++Builder
    Réponses: 13
    Dernier message: 20/06/2002, 17h03
  4. Existe t'il un composant permettant de jouer un son wav?
    Par scorpiwolf dans le forum C++Builder
    Réponses: 5
    Dernier message: 20/06/2002, 14h10
  5. Existe-t-il un langage de prog "virtuel" en Français
    Par HRS dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 10/06/2002, 18h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo