J'ai un champ de prix à afficher qui peut parfois être 100 ou 100,99 ou 100,9, ce que je veux, c'est afficher le prix à 2 décimales uniquement si les décimales sont entrées pour ce prix, par exemple si c'est 100 donc il ne devrait afficher 100 et non 100,00 et si le prix est 100,2, il devrait afficher 100,20 de même pour 100,22 devrait être le même. J'ai googlé et j'ai trouvé quelques exemples mais ils ne correspondaient pas exactement à ce que je voulais:
// just two decimal places
String.Format("{0:0.00}", 123.4567); // "123.46"
String.Format("{0:0.00}", 123.4); // "123.40"
String.Format("{0:0.00}", 123.0); // "123.00"
Réponses:
Une manière inélégante serait:
Avec
DoFormat
être quelque chose comme:Pas élégant mais travaillant pour moi dans des situations similaires dans certains projets.
la source
CurrentCulture
, le séparateur décimal peut ne pas l'être.
. À moins qu'il neCultureInfo.InvariantCulture
soit utilisé avecstring.Format
, vous devrez vérifier la valeur deCultureInfo.NumberFormat.NumberDecimalSeparator
, et ce serait un vrai PITA. :)60000
int et que je veux que ce soit60.000
?Désolé d'avoir réactivé cette question, mais je n'ai pas trouvé la bonne réponse ici.
Dans la mise en forme des nombres, vous pouvez utiliser
0
comme emplacement obligatoire et#
comme emplacement facultatif.Alors:
Vous pouvez également combiner
0
avec#
.Pour cette méthode de formatage est toujours utilisée
CurrentCulture
. Pour certaines cultures.
sera changé en,
.Réponse à la question d'origine:
La solution la plus simple vient de @Andrew ( ici ). Donc, personnellement, j'utiliserais quelque chose comme ceci:
la source
Il s'agit d'un cas d'utilisation de format flottant courant.
Malheureusement, toutes les chaînes de format à une lettre intégrées (par exemple, F, G, N) n'y parviendront pas directement.
Par exemple,
num.ToString("F2")
affichera toujours 2 décimales comme123.40
.Vous devrez utiliser le
0.##
motif même s'il a l'air un peu bavard.Un exemple de code complet:
la source
Vieille question mais je voulais ajouter l'option la plus simple à mon avis.
Sans séparateurs de milliers:
Avec des milliers de séparateurs:
La même chose mais avec String.Format :
Si vous en avez besoin à de nombreux endroits , j'utiliserais cette logique dans une méthode d'extension :
la source
essayer
la source
Je ne sais pas de toute façon mettre une condition dans le spécificateur de format, mais vous pouvez écrire votre propre formateur:
la source
Voici une alternative à la méthode d'Uwe Keim, qui conserverait toujours le même appel de méthode:
Avec
MyCustomFormat
être quelque chose comme:la source
CurrentCulture
, le séparateur décimal peut ne pas l'être.
. Sauf siCultureInfo.InvariantCulture
est utilisé avecstring.Format
, vous devrez vérifier la valeur deCultureInfo.NumberFormat.NumberDecimalSeparator
, ce qui est plutôt inélégant.Code simple sur une ligne:
la source
Si votre programme doit s'exécuter rapidement, appelez value.ToString (formatString) pour des performances de formatage de chaîne ~ 35% plus rapides par rapport à $ "{value: formatString}" et string.Format (formatString, value).
Les données
Code
Sortie de code
Références
Chaînes de format numérique personnalisées [docs.microsoft.com]
Exemple de diagramme à barres Qt Charts [doc.qt.io]
la source
Je crains qu'il n'y ait pas de format intégré qui puisse faire cela. Vous devrez utiliser un format différent selon que la valeur est un nombre entier ou non. Ou toujours formatez à 2 décimales et manipulez ensuite la chaîne pour supprimer tout ".00" de fin.
la source
Si aucune des autres réponses ne fonctionne pour vous, c'est peut-être parce que vous liez
ContentProperty
un contrôle dans laOnLoad
fonction, ce qui signifie que cela ne fonctionnera pas:La solution est simple: il y a une
ContentStringFormat
propriété dans le xaml. Donc, lorsque vous créez l'étiquette, procédez comme suit:Ou
la source
quelque chose comme ça fonctionnera aussi:
la source
Essayer:
la source
Pour rendre le code plus clair que Kahia a écrit (il est clair mais devient difficile lorsque vous souhaitez y ajouter plus de texte) ... essayez cette solution simple.
J'ai dû ajouter la distribution supplémentaire (décimale) pour que Math.Round compare les deux variables décimales.
la source
Cela a fonctionné pour moi!
la source
Lorsque vous traitez avec des décimales provenant d'une base de données (T-) SQL, vous voulez pouvoir convertir les décimales nullables et non nullables avec x décimales et être en mesure de revoir le code facilement par rapport à vos définitions de table - et bien sûr, afficher le bon nombre de décimales pour l'utilisateur.
Malheureusement, Entity Framework ne convertit pas automatiquement quelque chose comme un SQL
decimal(18,2)
en équivalent .NET avec le même nombre de décimales (car il n'y a que des décimales avec une précision complète disponibles). Vous devez tronquer manuellement les décimales.Donc, je l'ai fait de cette façon:
Exemple d'utilisation:
la source