46 votes

Comment formater une décimale en C# pour supprimer les 0 supplémentaires qui suivent ?

Je veux formater une chaîne de caractères sous forme de décimale, mais la décimale contient des zéros après la décimale. Comment puis-je la formater de telle sorte que ces 0 sans signification disparaissent ?

string.Format("{0}", 1100M);
string.Format("{0}", 1100.1M);
string.Format("{0}", 1100.100M);
string.Format("{0}", 1100.1000M);

affichages :

1100
1100.1
1100.100
1100.1000

mais je veux qu'il le soit :

1100
1100.1
1100.1
1100.1

Pour référence, voici d'autres questions qui sont essentiellement des doublons de celle-ci, que j'ai trouvées grâce aux réponses données ici :

80voto

Herohtar Points 902

Vous pouvez utiliser ToString() avec le Spécification du format général ("G") pour obtenir le résultat souhaité. Les zéros de queue sont tronqués lorsque cette chaîne de format est utilisée avec une précision spécifiée. Afin d'éviter les arrondis dans toutes les situations, vous devez définir la précision au maximum autorisé pour les décimales (29).

La ligne de code pour obtenir ce que vous voulez est la suivante number.ToString("G29")number est votre décimale d'origine.

Sachez que tous les nombres inférieurs à 0,0001 seront convertis en notation scientifique. Vous trouverez plus de détails sur le fonctionnement de ce formateur au lien de référence ci-dessus.

21voto

Jason dinAlt Points 131
string s = d.ToString("0.#############################");

4voto

Jon Skeet Points 692016

Ils ne sont pas nécessairement sans signification - ils indiquent la précision lors du calcul. Les décimales conservent leur niveau de précision, plutôt que d'être normalisées.

J'ai du code dans cette réponse qui renvoie une valeur normalisée - vous pouvez l'utiliser, puis formater le résultat. Par exemple :

using System;
using System.Numerics;

class Test
{
    static void Display(decimal d)
    {
        d = d.Normalize(); // Using extension method from other post
        Console.WriteLine(d);
    }

    static void Main(string[] args)
    {
        Display(123.4567890000m); // Prints 123.456789
        Display(123.100m);        // Prints 123.1
        Display(123.000m);        // Prints 123
        Display(123.4567891234m); // Prints 123.4567891234
    }
}

I suspect que la plupart des approches de la chaîne de format échoueront. Je suppose qu'une chaîne de format composée de "0." puis de 28 caractères # pourrait fonctionner, mais elle serait très moche...

3voto

driis Points 70872

Vous pouvez spécifier le chaîne de format comme ça :

String.Format("{0:0.000}", x);

2voto

Baz Hughes Points 21

Il y a déjà pas mal de réponses. Je me réfère souvent à cet aide-mémoire : http://blog.stevex.net/string-formatting-in-csharp/

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