732 votes

Comment afficher une valeur décimale à 2 décimales ?

Lors de l'affichage de la valeur d'une décimale actuellement avec .ToString() Il est précis à 15 décimales près, et comme je l'utilise pour représenter des dollars et des cents, je veux que la sortie soit seulement à 2 décimales.

Dois-je utiliser une variante de .ToString() pour ça ?

0 votes

Aquí est un bref exemple des différentes options de formatage des valeurs à virgule flottante (alignement, nombre de chiffres, séparateurs de groupes, exponentiel, pourcentage, monnaie, etc.)

0 votes

1031voto

albertein Points 10821
decimalVar.ToString("#.##"); // returns ".5" when decimalVar == 0.5m

o

decimalVar.ToString("0.##"); // returns "0.5"  when decimalVar == 0.5m

o

decimalVar.ToString("0.00"); // returns "0.50"  when decimalVar == 0.5m

34 votes

Le problème ici est quand nous avons 0.00 ; il retourne une chaîne vide.

174 votes

Vous pourriez alors faire decimalVar.ToString ("0.##"). Vous pouvez également utiliser 0,00 comme chaîne de formatage.

0 votes

@MikeCole Je ne pense pas qu'il soit possible d'effectuer une troncature avec le formatage seul - la seule façon que je connaisse est de le passer d'abord dans Math.Floor, donc quelque chose comme (Math.Floor(decimalVar * 100M) / 100M).ToString("0.00") devrait fonctionner (et si vous utilisez des doubles et non des décimales, utilisez 100D au lieu de 100M, bien sûr).

635voto

Mike M. Points 5408

Je sais que c'est une vieille question, mais j'ai été surpris de voir que personne ne semblait avoir posté de réponse à cette question ;

  1. N'a pas utilisé l'arrondi bancaire
  2. Conserve la valeur sous forme décimale.

C'est ce que j'utiliserais :

decimal.Round(yourValue, 2, MidpointRounding.AwayFromZero);

http://msdn.microsoft.com/en-us/library/9s0xa85y.aspx

3 votes

ToString ou string.Format n'utilisent pas les arrondis bancaires : msdn.microsoft.com/fr/us/library/0c899ak8.aspx#sectionToggle1

4 votes

@MatthijsWessels Je sais... mais il ne conserve pas non plus la valeur sous forme décimale.

1 votes

Il s'agit d'une meilleure façon de représenter réellement deux décimales, car elle n'élimine pas les zéros de fin.

411voto

Sofox Points 1201
decimalVar.ToString("F");

Ce sera :

  • Arrondir à 2 décimales eg. 23.45623.46
  • Veillez à ce qu'il y ait qu'il y a toujours 2 décimales eg. 2323.00 ; 12.512.50

Idéal pour afficher la monnaie.

Consultez la documentation sur ToString("F") (merci à Jon Schneider).

12 votes

Cela fonctionne bien lorsqu'il n'y a qu'une seule décimale ; .ToString("#.##") échoue. Cette réponse est bien meilleure

2 votes

Ne serait-il pas possible d'arrondir 23.456 => 23.46 ?

18 votes

Documentation sur ce que le "F" signifie ici, et comment il fonctionne : msdn.microsoft.com/fr/us/library/

114voto

smink Points 39640

Si vous n'en avez besoin que pour l'affichage, utilisez string.Format.

String.Format("{0:0.00}", 123.4567m);      // "123.46"

http://www.csharp-examples.net/string-format-double/

Le "m" est un suffixe décimal. A propos du suffixe décimal :

http://msdn.microsoft.com/en-us/library/364x0z75.aspx

11 votes

Techniquement, pour une décimale, ce serait 123,4567 m, oui ? Sans le suffixe "m", c'est un double.

4 votes

Ou raccourci $"{valeur:0.00}"

59voto

Hafthor Points 5663

Étant donné que décimal d=12.345 ; les expressions d.ToString("C") o String.Format("{0:C}", d) rendement $12.35 - Notez que les paramètres de la devise de la culture actuelle, y compris le symbole, sont utilisés.

Notez que "C" utilise le nombre de chiffres de la culture actuelle. Vous pouvez toujours remplacer la valeur par défaut pour forcer la précision nécessaire avec C{Precision specifier} comme String.Format("{0:C2}", 5.123d) .

4 votes

@Slick86 - le signe actuel

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X