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 :

Formatage de nombres


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Par défaut Formatage de nombres
    Bonjour,
    je suis debutant sur ce site et n'ai pas trouvé de reponse ( je ne sais peut etre pas bien faire la recherche...)

    Je voudrais savoir si'l es possible d'avoir dans tous mon projet ( ou au moins d'appliquer a des formulaires en eniter)
    un formatage pour les nombres ... que ca ecrive 1 233 566.23 au lieu de 1233566.23 sur tous mes controles ...
    bref je voudrais avoir les espaces de separations pour les milliers et ce d emaniere systematique si possible

    Comment faire ?

    Merci

  2. #2
    Membre Expert Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Par défaut
    Citation Envoyé par francois 974 Voir le message
    Je voudrais savoir si'l es possible d'avoir dans tous mon projet ( ou au moins d'appliquer a des formulaires en eniter)
    un formatage pour les nombres ... que ca ecrive 1 233 566.23 au lieu de 1233566.23 sur tous mes controles ...
    Tu peux passer par la méthode ToString.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public static string FormatNombreAvecSeparateurMilliers(long nombre)
    {
        return nombre.ToString("n0");
    }
    Ou encore selon les cas:
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    double uneValeur = 689257;
    TonTextBox.Text = uneValeur.ToString("#,##0");

    Il se peut qu'au lieu de " " comme séparateur, tu ais ",". Si c'est le cas, alors c'est que la culture de ton système est en Anglais. Change la en français via
    Thread.CurrentThread.CurrentCulture = New CultureInfo("fr-FR").

  3. #3
    Membre Expert Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Par défaut
    Pour plus de détails, regarde les Standard Numeric Format Strings

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Par défaut
    Oui la c'est pour un textbox mais ce que je voudrais cc'est que ca s'applique partout sans que j'ai a l'ecrire a chaque fois

  5. #5
    Membre Expert Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Par défaut
    Bah, tu dois écrire une fonction (comme je l'ai fait dans ma première réponse) qui prend en paramètre un double par exemple et te retourne ta valeur avec le séparateur de milliers. Puis, il te suffira d'appeler cette fonction à chaque emplacement où tu as besoin de faire ton affichage.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il me semble qu'il suffit de manipuler "Thread.CurrentThread.CurrentUICulture" au démarrage. C'est un objet de type "CultureInfo". Dedans, il y a un membre "NumberFormat" de type "NumberFormatInfo". Dedans il y a plein d'options pour les affichages de nombres.

    Le code devrait donner qqch du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thread.CurrentThread.CurrentUICulture.NumberFormat.NumberGroupSeparator=" ";
    à faire au démarrage de l'application.

    Si ça ne fonctionne pas, essayer de réaffecter "Thread.CurrentThread.CurrentUICulture" avec un clone :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CultureInfo newCI = (CultureInfo)Thread.CurrentThread.CurrentUICulture.Clone();
    newCI.NumberFormat.NumberGroupSeparator = " ";
    Thread.CurrentThread.CurrentUICulture = newCI;

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Par défaut
    bonsoir,
    oui
    javais vu un truc comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("fr-FR");
    mais je ne sais pas ou le placer ...
    et j'ai l'impression que ca na pas changé grand chose ...
    meme en le mettant ds un formulaire , celui ci navait pas l'air d'etre affecté pour autant

    en fait , j'ai deja des dizaines( peut etre meme des centaines de formulaires)
    et cela me semble difficile de croire qu'il faut aller modifier chaque controle ou methode tostring() pour qu'il m'ecrive un simple nombre selon le format que je voudrais..

  8. #8
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par francois 974 Voir le message
    et cela me semble difficile de croire qu'il faut aller modifier chaque controle ou methode tostring() pour qu'il m'ecrive un simple nombre selon le format que je voudrais..
    Pourtant il va falloir te faire à l'idée. Le seul moyen d'éviter cela serait de créer ta propre classe qui dérive de Int32 par exemple, et tu fais en sorte de récupérer ce que tu attends. Ensuite à toi d'utiliser ton type personnalisé de partout où tu en as besoin...

    • La solution proposée par Ph_Gr va affecter tous les traitement du thread donc elle est plus globale. Ca va affecter les formats de date, de nombre, etc.
    • La solution proposée par callo est plus "chirurgicale", tu l'appliques où tu veux, uniquement quand tu en as besoin. A noter, tu peux également créer une méthode d'extension sur le type cible afin de pouvoir appliquer le format souhaité.


    [EDIT] Ou alors tu peux également créer un control personnalisé, qui va se charger de gérer le format du nombre avant de l'afficher.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Par défaut
    Bonjour,

    ok pour la reponse de : Ph_Gr va affecter tous les traitement du thread donc elle est plus globale
    mais ou faut il ecrire ces lignes ?
    car j'avais essayé ca dans un formulaire mais il me semble que cela n'avait rein affecter du tout
    ou bien j'avais ecrit quelque chose derriere avec tostring qui empechait ce fonctionnement ?
    si par exemple j'avais tostring("0.00") du coup cela n'etait pas affecté par la commande precedante ?

  10. #10
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Si tu utilises la solution de Ph_Gr, tous les formats (de date, de nombre, etc.) sont stockés dans la Culture.

    Cette culture s'applique automatiquement, tu n'as donc pas besoin de forcer le format en passant par un ToString("0.00");.

    Pour savoir où positionner le paramétrage de la Culture, ça dépend surtout du besoin...

    Si tu veux appliquer ce paramétrage sur l'ensemble de ton application, tu dois choisir un endroit central de ton code, par exemple pour une application console, dans le Main().

    Si tu veux l'appliquer sur un thread spécifique, tu peux le définir la culture du thread au moment où tu l'initialises/le lances.

    Enfin, si tu veux juste avoir ce formattage pour l'affichage sur un formulaire spécifique, sans impacter tout le reste, tu peux créer un control personnalisé qui dérive de TextBox. Au moment du binding, tu appliques la Culture dont tu as besoin, et le tour est joué.

    Voilà donc à toi de voir en fonction de ton besoin, il y a pas mal de scénarios possibles
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Par défaut
    OK
    disons qu'on le met dans le main()
    mais je me demandais du coup
    si le fait d'ecrire ensuite dans un formulraire : tostring("0.00") ne va pas "overwriter" la culture ?

Discussions similaires

  1. [XSL-FO] formatage de nombre
    Par qouify dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 16/05/2006, 14h58
  2. [PHP-JS] Formatage de nombre
    Par goldorax113 dans le forum Langage
    Réponses: 5
    Dernier message: 08/05/2006, 12h50
  3. formatage de nombre
    Par Phiz dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 29/03/2006, 19h17
  4. Formatage de nombres dans une page JSP
    Par Addouna dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 10/03/2006, 14h01
  5. Formatage des nombres à l'affichage
    Par nbutin dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 13/07/2004, 11h54

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