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 nombre en string


Sujet :

C#

  1. #1
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 72
    Points : 100
    Points
    100
    Par défaut Formatage nombre en string
    Bonjour,

    Je souhaite formater un nombre afin d'inserer une virgule lorsqu'il est affiché.
    Je m'explique :
    je stocke des montants, mais sans la virgule, en base de centimes.
    Par exemple 12,00€ ==> 1200
    0,40€ ==> 40

    ce que je souhaite, c'est pouvoir appliquer un masque ou un Format afin d'afficher 12,00 ou 12.00 lorsque je fait value.ToString(format).
    Dasn l'application cela ne pose pas de problème vu que j'utilise des maskedtextbox, mais la le soucis est lorsque je genère un fichier RTF.

    J'ai regardé du coté de la fonction statique Format de l'aide MSDN, notament cet exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    value = 86000;
          Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
    	   // Displays 8.6E+4
    en enlevant le E+0 car ça ne m'interesse pas, mais sans succès

    D'avance merci

    Bonne journée

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Bonjour,

    MSDN est ton ami

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 230
    Points : 52
    Points
    52
    Par défaut
    regarde string.format

    ex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
              this.labelttHT.Text = String.Format("{0:C}", resultattotal);
    cela permet de formater du style "12.34 euros"

    je sais pas si c'est ce que tu demande

  4. #4
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 72
    Points : 100
    Points
    100
    Par défaut
    Merci de vos réponses,

    J'ai beau eplucher tout ce qui tourne autour de String.Format, je ne voit rien qui puisse faire ce que je veux, c'est à dire passer de 1200 à 12.00 par exemple :s

    @lovedesitaliens
    Merci, mais le formatage par la devise m'affche 1200,00 € du coup, alors que je voudrais 12,00 €.

    C'est bizarre que c'est fesable à travers les maskedtextbox et leurs masks, mais pas via Format :s

  5. #5
    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 : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Bonjour,

    Pour appliquer un masque sur un string, il faut utiliser la syntaxe suivante : {0:00.0#}

    Dans ton premier exemple, tu n'as pas mis le '0:' au début.

    Donc ça deviendrait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    value.ToString("{0:00.00} EUR", CultureInfo.InvariantCulture)
    pour passer de '1200' à '12.00 EUR'.

    En espérant t'avoir aidé

  6. #6
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 72
    Points : 100
    Points
    100
    Par défaut
    Merci de ta réponde Matt07,
    malheuresement, lorsque je fait comme tu dis (et comme c'est écrit sur MSDN), je ne me retrouve pas avec 12.00, mais avec qqch d'assez farfelu => {12:00.00}
    :o

  7. #7
    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 : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Ah c'est bizarre...

    Peux-tu nous montrer un exemple de code que tu utilises et qui occasionne ce mauvais affichage ?

    [EDIT]
    Essaye avec ceci, ça fonctionne chez moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int test = 1200;
    string.Format("{0:00.00}", decimal.Divide(test, 100));

  8. #8
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Matt07 a totalement raison, tu le dis toi même tu stockes tout ça en centime, il faut donc retourner en base euro avant d'afficher les données en base euro !

    Le String.Format formatte (logique) or tu lui demandes de convertir, ce n'est pas son travail !

  9. #9
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 72
    Points : 100
    Points
    100
    Par défaut
    Effectivement avec la méthode de Matt07 ça marche, mais c'est parcequ'il y a la division par 100 qui aide beaucoup, hors je ne veut pas de division, l'application en developpement va gere différentes devise, et donc je ne voudrais pas trop avoir à savoir par combien je divise en fonction du point décimal de la devise en cours.

    Pourquoi n'est t'il pas possible de formatter comme avec le maskedtextbox ?
    En fonction du masque qui lui est appliqué, il affiche à l'utilisateur le nombre passé dans sa propriété text (par exemple 1200) grâe au masque : 12,00 si le masque est 00.00, 1,200 si le masque est 0.000 :s

    merci en tout cas pour vos réponse rapide

  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 : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Comme l'a dit ostenhard,

    Le String.Format formatte (logique) or tu lui demandes de convertir, ce n'est pas son travail !
    Si tu sais que tous les montants que tu stockes sont en centimes, et ce quelle que soit la devise, alors il te faudra toujours diviser par 100 pour repasser en base Euro.

    Pour faire ce que tu souhaites, tu peux aussi choisir d'insérer ta virgule ou ton point à l'endroit où tu veux dans ton string. Au final, si l'on compare les 2 façons de faire, ça reviendra sensiblement au même...

  11. #11
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Il y a un intérêt, c'est de ne travailler qu'avec des entiers mais es-tu sûr que de travailler avec les centimes conviennent totalement, n'auras-tu jamais de cas où il faudra travailler dans une unité plus basse ?

  12. #12
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 72
    Points : 100
    Points
    100
    Par défaut
    J'ai parlé des Euros, mais ça peut très bien être une autre monnaie comme la livre ou le Zloty, et dont on ne stockera pas forcement en centimes mais peut etre en unité car cette monnaie est moin forte, et donc la virgule ne sera pas la où elle est en Euros par exemple.

    Il n'y aura aucune conversion de monnaie, l'utilisateur choisi sa devise, et en fonction de la devise il y a ou non une virgule, et elle est à des endroits différents sur la chaine.

    Merci de votre aide, mais je crois que je vais developper une petite fonction qui va récupere ou est située la virgule dans mes mask de ma devise pour formater mon entier comme je le souhaite, si vous avez d'autre idées je suis prenneur

    merci encore de votre activité

Discussions similaires

  1. probleme formatage nombre
    Par coold dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 23/09/2008, 16h40
  2. formatage avec std::string
    Par hpfx dans le forum SL & STL
    Réponses: 2
    Dernier message: 21/09/2008, 13h57
  3. [CR XI] formatage nombre décimaux
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 26/09/2006, 14h31
  4. Sum et formatage nombre
    Par cari dans le forum Oracle
    Réponses: 8
    Dernier message: 30/05/2006, 18h32
  5. formatage d'un string
    Par mmz dans le forum Langage
    Réponses: 6
    Dernier message: 03/05/2006, 11h04

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