ToString valeur Monetaire [Résolu]

Signaler
Messages postés
105
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
22 octobre 2008
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Bonjour,

Je soufaite afficher un double dans un label mais à la facon d'une valeur monetaire.
123.00 => 123.00?
Je sais que l'on peux faire cela en faisant ToString("C")

Mais en fait je souhaite que cela affiche
123.20 => 123.20?
123 => 123?
Or le ToString("C") ajoute les decimaux.

Si vous avez une idée.

Merci

16 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
93
C'est vrai que du coup je me pose aussi la question maintenant...

Enfin, au pire une petite méthode de formatage :

private String ToMoneyString(Decimal dec)
{
    return this.ToMoneyString(dec, CultureInfo.CurrentCulture);
}


private String ToMoneyString(Decimal dec, IFormatProvider provider)
{
    String format = "C";


    if (dec % Decimal.Truncate(dec) == 0)
    {
        format = "C0";
    }


    return dec.ToString(format, provider);
}

Ou en condensé :
private String ToMoneyString(Decimal dec, IFormatProvider provider)
{
    return dec.ToString((dec % Decimal.Truncate(dec) == 0) ? "C0" : "C", provider);
}

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
467
Date d'inscription
lundi 24 juin 2002
Statut
Membre
Dernière intervention
9 mars 2011

dans la "currentculture" du thread (localization) ou par globalization tu devrais regardé ya surment un reglage des decimales possible

TeBeCo
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
93
Salut,

Logiquement tu peux faire ce que tu veux avec les chaînes de format numériques personnalisées.

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
105
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
22 octobre 2008
15
-> TeBeCo : Je souhaite pas changer le reglage car je vais les afficher si il y en a.

-> Coq: Ben j'ai deja regarder là.
Mais impossible de trouver le chaine qui va bien pour faire ca. J'ai essayé des "C.##" et autres, mais rien n'y fait.
Messages postés
467
Date d'inscription
lundi 24 juin 2002
Statut
Membre
Dernière intervention
9 mars 2011

code le a la main alors ...
Decimal toto = 123
Decimal tata = 123.20
String sRes;

if ((toto - (Int32)toto) != 0)
{
    toto = ((Int32)(toto*100))/100;
    sRes = toto.ToString();
}
else
{
    sRes = ((Int32)toto).Tostring();
}

(idem avec tata)
ou qqchose de similaire enfin ca me semble assez simpliste

TeBeCo
Messages postés
105
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
22 octobre 2008
15
Oui non le faire à la main c'est pas un probleme, mais je suis quasi persuadé que l'on peux faire ca sans coder de code.
Le ToString est la autant que l'on s'en serve. Mais si persone n'a de reponse, je ferais ca. En tout cas merci.
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
56
Je ne sais pas si ça résoud le problème, mais tu peux indiquer le nombre de décimal désirée en faisant:
"CX" ou x est le nombre de décimal

......ToString(C0);

<hr />
-Blog-
Messages postés
105
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
22 octobre 2008
15
J'avais trouvé ca aussi.
Mais en fait j'ai besoin que ca affiche les decimales que si il y en a.
Et le "C0" ne les affichera pas du tout.

En même temps je me demande de plus en plus si ca existe :(
Il va falloir que je code
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
56
Taper 3 ou 4 lignes de codes, c'est pas la fin du monde ou bien?

<hr />
-Blog-
Messages postés
105
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
22 octobre 2008
15
Non ce n'est pas le fait de tapper des lignes de codes, c'est le fait de ne pas trouver cela. Cela m'etonne de C#   :)
Messages postés
467
Date d'inscription
lundi 24 juin 2002
Statut
Membre
Dernière intervention
9 mars 2011

demandes toi si tu perds plus de temps a trouver une methode en 1 ligne qui te semble parfaite mais que marlgres tout ecrira les ligne qui te manque en IL ou le faire directement en C# qui sera aussi traduis en IL et peut etre meme mieux optimisé au final ...
et compare le temps que tu perd sur le forum pour ca :p

TeBeCo
Messages postés
105
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
22 octobre 2008
15
Je pense que je ne suis pas le seul a vouloir utiliser les possibilités offertes pas .Net.

Apres faire du code, alors que d'autre on fait quelque chose qui est certainement mieux, je trouve ca dommage.

Apres ce n'est qu'un avis
Messages postés
105
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
22 octobre 2008
15
En tout cas merci pour votre aide, et merci au coq qui comme d'habitude donne du code nickel
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
93
Je pense qu'il disait plus ça dans le sens ratio intérêt/temps "perdu" ^^
Après je suis le premier à préférer utiliser l'intégré (la plupart de ces gens doivent avoir des compétences supérieures aux miennes, et c'est justement eux qui effectuent la maintenance !).
Mais là je serais étonné qu'un format permette de faire ça directement (et si c'est le cas, il suffira de remplacer le code de la méthode sans briser l'existant reposant dessus), ainsi tu peux te pencher sur les taches plus urgentes :-)

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
105
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
22 octobre 2008
15
C'est deja ce que je faisais, j'avais même deja fait le code pour le faire. Mais je me suis dit on verra bien si on pouvait mieux faire

En tout cas merci à vous tous
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
93
De rien :-)

/*
coq
MVP Visual C#
CoqBlog
*/