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 :

Savoir si un string est un double


Sujet :

C#

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Savoir si un string est un double
    Voila j'ai besoin de savoir si les valeurs d'un tableau qui sont au format string sont en réalité des "double". Mais si elles le sont, pas le programme plante.

    Voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    private static void RechercheMain(string[] t)
            {
                for (int i = 0; i < t.Length; i++)
                {
                    bool TestEntier,TestEntier2 = false;
                    if (t[i] == "Main" )
                    {
                        TestEntier = Microsoft.VisualBasic.Information.IsError(double.Parse(t[i+1]));
                        TestEntier2 = Microsoft.VisualBasic.Information.IsError(double.Parse(t[i+2]));
                        if (TestEntier == true && TestEntier2 == true) 
                        {
                            ....                    }
                    }
                }
            }
    Le probleme est que si double.Parse() est impossible, c'est à dire si t[i+1] ne peut pas etre converti en double, au lieu de me renvoyer false dans le bool, il me plante le programme.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Pourquoi ne pas utiliser Double.TryParse(string s, out double result) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    double d = Double.NaN; // valeur non numérique
    string s = "2.57877";
    Double.TryParse(s, d);
    if(Double.IsNan(d)) {
     // la chaîne s n'était pas valide
    } else {
     // la chaîne s est valide
    }

  3. #3
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    bool TestEntier,TestEntier2 = false;
    try
    {
     double d = double.Parse("mama");
    }
    catch(FormatException)
    {
     TestEntier = true; // la conversion a échoué
    }

  4. #4
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    @fally: pas fameux niveau performance. il est toujours idéal d'éviter les exceptions quand on en a la possibilité.

    Citation Envoyé par Kaidan Voir le message
    Pourquoi ne pas utiliser Double.TryParse(string s, out double result) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    double d = Double.NaN; // valeur non numérique
    string s = "2.57877";
    Double.TryParse(s, d);
    if(Double.IsNan(d)) {
     // la chaîne s n'était pas valide
    } else {
     // la chaîne s est valide
    }

    Plutot comme ceci alors...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    string s = "2.57877";
     
    if (IsDouble(s))
    {
    ...
    }
     
    ...
     
    public bool IsDouble(string str)
    {
       double d;
       return Double.TryParse(str, out d);
    }

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    J'avais pas vu les reponses

  6. #6
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Citation Envoyé par neptune Voir le message
    @fally: pas fameux niveau performance. il est toujours idéal d'éviter les exceptions quand on en a la possibilité.
    Absolument d'accord! c'était pour illustrer

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Un détail : Parse, TryParse and co se basent par défaut sur les paramètres locaux de la machine courante. Donc sur une machine française, double.TryParse("1.1", out d) renverra faux. Parce que le séparateur décimal est la virgule, en France.

    Donc en fonction de la source qui te fournit ces chaînes, précise au fonction de conversion quelle Culture utiliser.
    ಠ_ಠ

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par neptune Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    string s = "2.57877";
     
    if (IsDouble(s))
    {
    ...
    }
     
    ...
     
    public bool IsDouble(string str)
    {
       double d;
       return Double.TryParse(str, out d);
    }
    Nikel Merci

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

Discussions similaires

  1. Savoir si un "String" est présent dans un tableau de "String"
    Par Leniouns dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 23/08/2011, 16h21
  2. Savoir si une string est une date.
    Par poly128 dans le forum Delphi
    Réponses: 3
    Dernier message: 15/05/2007, 23h10
  3. Comment savoir si un String est un Float
    Par ludovic tambour dans le forum Débuter
    Réponses: 8
    Dernier message: 14/12/2005, 13h36
  4. Savoir si un string est un numérique
    Par Homer dans le forum Langage
    Réponses: 3
    Dernier message: 05/10/2005, 16h21
  5. Savoir si une string est un nombre
    Par SteelBox dans le forum SL & STL
    Réponses: 10
    Dernier message: 14/02/2005, 19h59

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