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 :

Probleme de virgule ou de point d'un champ double


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut Probleme de virgule ou de point d'un champ double
    Bonjour, j'ai une application windows c# que j'ai déployé sur deux postes clients (tous les pcs sont sous une version française de Windows), j'ai un champ estimation qui est un double

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     private bool IsDocumentValid()
            {
    ....
    if (!double.TryParse(txtEstimation.Text, out textboxValue))
                {
                    errorProvider1.SetError(txtEstimation, "Ce champs doit être numérique");
                    return false;
                }
    .........................
    sur mon pc (la ou il y a la BD) quand je met 333.33 ca passe et quand je met 333,33 j'ai le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ce champs doit être numérique
    sur les autres pcs : quand je met 333.33 j'ai le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ce champs doit être numérique quand je met 333,33 ca passe mais j'ai une erreur non géré
    svp, est ce que vous avez une idée sur ca ?

  2. #2
    Membre chevronné Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Par défaut
    Bonjour ,

    C'est un problème classique que beaucoup de gens rencontre.

    Visual studio comprend le '.' pour designer les double décimal.Hors selon la culture où tu te trouves , c'est la ',' qui est utilisée (comme en France).

    Donc soit tu précise la culture dans le TryParse , soit tu joues avec le Replace(',','.') .

    Bon code.

  3. #3
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 001
    Par défaut
    Donc soit tu précise la culture dans le TryParse , soit tu joues avec le Replace(',','.') .
    Ce n'est pas parce que le Windows est français que la culture utilisée sera automatiquement le français.
    Tu peux quelques fois être victime d'un autre processus (ou même d'une fausse manipulation de l'utilisateur) et sa culture se retrouve en anglais.

    Pour pallier à ce problème, il faut choisir une culture et s'y tenir, c'est à dire faire en sorte que si le format trouvé n'est pas dans la bonne culture, on le change.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    value = value.Replace(" ", String.Empty).Replace(".", ",");
    NumberStyles style = NumberStyles.AllowDecimalPoint;
    CultureInfo culture = CultureInfo.CreateSpecificCulture("fr-FR");
     
    Double x = Double.Parse(value, styles, culture);
    Pour plus d'infos, je t'invite à regarder ce lien :
    https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx

  4. #4
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Pour ma part, je parse souvent deux cultures, pour éviter les soucis : la culture courante et la culture invariante (basée sur la langue anglaise) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    double d;
    double? parsedDouble = double.TryParse(value, NumberStyles.Any, CultureInfo.Current, out d) ||
                           double.TryParse(value, NumberStyles.Any, CultureInfo.InvarientCulture, out d) ? d : (double?)null;
    parsedDouble contient la valeur parsée. On essai d'abord avec la culture courante, puis en cas d'échec, la culture invariante. Si ni l'une ni l'autre de ces solutions ne marche, cette variable est nulle.

  5. #5
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut
    J ai optė pour la solution de culture et style ca me bloque quand je met le point il me dit ce champ doit etre numerique le message que me fait sortir le provider si je met un point ca passe mais lors du traitement ca crache il me dis format chaine incorrect


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     bool okest2 = Double.TryParse(txtEstimation.Text, System.Globalization.NumberStyles.Any, new System.Globalization.CultureInfo("fr-FR"), out textboxValue) ||
                    Double.TryParse(txtEstimation.Text, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out textboxValue);
     
                if (!okest2)//!double.TryParse(txtEstimation.Text, out textboxValue)
                {
                    errorProvider1.SetError(txtEstimation, "Ce champs doit être numérique");
                    return false;
                }

  6. #6
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut
    je suis désolée mais l'erreur était sur une autre interface de modification et moi je travaillais sur l'interface nouveau.

    ca passe maintenant merci, si je veux mettre une fonction pour tout mes double :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    bool okest2 = Double.TryParse(txtEstimation.Text, System.Globalization.NumberStyles.Any, new System.Globalization.CultureInfo("fr-FR"), out textboxValue) ||
                    Double.TryParse(txtEstimation.Text, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out textboxValue);
     
                if (!okest2)//!double.TryParse(txtEstimation.Text, out textboxValue)
                {
                    errorProvider1.SetError(txtEstimation, "Ce champs doit être numérique");
                    return false;
                }
    il doit me retourner un tableau, le premier c'est le bool, et le deuxieme soit le double soit le null ???
    merci pour vos idées

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

Discussions similaires

  1. probleme de virgule et point
    Par tarmo57 dans le forum Débuter
    Réponses: 8
    Dernier message: 18/10/2008, 15h43
  2. Réponses: 1
    Dernier message: 29/11/2006, 12h00
  3. Réponses: 8
    Dernier message: 05/08/2006, 13h30
  4. probleme de virgule dans la mise à jour d'une base de donnée
    Par KAF dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 24/12/2005, 02h18
  5. [sql] remplacer une virgule par un point
    Par shiners300 dans le forum Oracle
    Réponses: 1
    Dernier message: 23/12/2005, 19h19

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