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 :

Changer separateur de saisie decimal


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 69
    Par défaut Changer separateur de saisie decimal
    Bonjour,
    Est-il possible de changer le separateur de saisie decimal a partir d'une application sans demander à l'utilisateur de le modifier dans le panneau de configuration? Si oui comment? Merci.

  2. #2
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    bonjour,
    regarde dans la classe CultureInfo, tu peux en créer une et demander à l'utilisateur de créer sa propre culture. c'est pas compliqué du tout.
    regarde sur google si tu sais pas.

  3. #3
    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
    Tu peux faire simplement ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator = ".";
    Ca récupère la culture en cours (qui dépend des préférences de ton OS, mais que tu peux surcharger : c'est la propriété CurrentCulture) et modifie ses paramètres de formatage de nombre.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 69
    Par défaut
    C'est sa que j'ai fait Guulh mais cela me genere une erreur en l'executant disant que cette variable est en lecture seul !!

  5. #5
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Pour quelle raison dois-tu changer le séparateur ?

    Généralement on est confronté à ce problème avec des conversion de valeurs flottantes sous forme d'une chaîne en valeur numérique (float, double, decimal). A ce moment il faut spécifier un IFormatProvider aux méthodes (Parse, TryParse, ...) pour indiquer comment doit se faire la conversion (le séparateur décimal à utiliser notamment).

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Par défaut
    tu peux t inspirer de ca :

    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
            public static double ToDouble(string sValue)
            {
                try
                {
                    double nValue = 0.0;
                    System.Globalization.NumberFormatInfo provider = new System.Globalization.NumberFormatInfo();
                    provider.NumberDecimalSeparator = ",";
                    nValue = Convert.ToDouble(sValue, provider);
                    return nValue;
                }
                catch
                {
                    return double.NaN;
                }
            }

  7. #7
    Membre éclairé Avatar de bellak
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2008
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2008
    Messages : 325
    Par défaut
    Citation Envoyé par alavoler 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
            public static double ToDouble(string sValue)
            {
                try
                {
                    double nValue = 0.0;
                    System.Globalization.NumberFormatInfo provider = new System.Globalization.NumberFormatInfo();
                    provider.NumberDecimalSeparator = ",";
                    nValue = Convert.ToDouble(sValue, provider);
                    return nValue;
                }
                catch
                {
                    return double.NaN;
                }
            }
    mais si la valeur de sValue est par ex : 2.5 ça retourne 25 comme resultat , non ??

  8. #8
    Membre éclairé Avatar de bellak
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2008
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2008
    Messages : 325
    Par défaut
    moi j'utilise l'evenement KeyDown :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char Separateur = (System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0])
    if ((e.KeyChar == '.') || (e.KeyChar == ','))
    {
            // Forcer l'ecriture du bon séparateur
            e.KeyChar = Separateur;
    }

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Par défaut
    bellak

    C'est deux usages différents.

    Soit tu es sur et certain du formatage de ta chaine, (donc que je reçois tjs un nombre a virgule avec une virgule ) donc t utilises ma solution.

    Soit tu veux permettre a l'utilisateur d'utiliser le point ou la virgule en plus de son caractère régionale de séparation (qui peut etre un | par exemple en bloubikistan //pays imaginaire) et t utilise t'as solution.

    De plus je pense que ca genere une exception si on met 2.5 alors que ma methode attend une virgule...

    Le fait est qu on ne sait pas a quel moment il veut traiter la decimal (au niveau de l'interface, apres...)

  10. #10
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    il y a d'ailleurs beaucoup plus simple

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    // Affiche le code du spérateur décimal courant
    int c = (int)Application.CurrentCulture.NumberFormat.NumberDecimalSeparator[0];
    MessageBox.Show(c.ToString());
     
    // Les 4 lignes ci-dessous sont les plus importantes
     
    // Change le séparateur en point
    CultureInfo culture;
    culture = (CultureInfo)Application.CurrentCulture.Clone();
    culture.NumberFormat.NumberDecimalSeparator = ".";
    Application.CurrentCulture = culture;
     
    // Affiche le code du séparateur décimal après modification
    c = (int)Application.CurrentCulture.NumberFormat.NumberDecimalSeparator[0];
    MessageBox.Show(c.ToString());
     
    // Tente une conversion d'un décimal avec une virgule
    try
    {
        string d = "12,36";
        MessageBox.Show(Double.Parse(d).ToString());
    }
    catch (Exception exc)
    {
        MessageBox.Show("Echec normal\n" + exc.Message);
    }

  11. #11
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    alors ????? ça fonctionne ?

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

Discussions similaires

  1. [AC-2007] Changer separateur de decimale de point à virgule
    Par izeba dans le forum Modélisation
    Réponses: 3
    Dernier message: 27/04/2011, 12h26
  2. Réponses: 2
    Dernier message: 06/10/2010, 09h40
  3. [WD12] Changer borne champ saisie
    Par nirannor dans le forum WinDev
    Réponses: 6
    Dernier message: 12/05/2010, 13h46
  4. changer istream après saisie
    Par lastrecrue dans le forum C++
    Réponses: 1
    Dernier message: 05/04/2007, 20h21
  5. Réponses: 2
    Dernier message: 21/03/2005, 09h03

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