web-dev-qa-db-fra.com

Utilisez un séparateur de milliers personnalisé en C #

J'essaie de ne pas utiliser le caractère "," comme un séparateur de milliers lors de l'affichage d'une chaîne, mais d'utiliser un espace à la place. Je suppose que j'ai besoin de définir une culture personnalisée, mais je ne semble pas avoir raison. Des pointeurs?

par exemple: afficher 1000000 comme 1 000 000 au lieu de 1 000 000

(non, String.Replace() n'est pas la solution que j'aimerais utiliser: P)

35
Luk

Je vous suggère de trouver un NumberFormatInfo qui correspond le mieux à ce que vous voulez (c'est-à-dire qu'il est juste à part le séparateur des milliers), appelez Clone() = dessus, puis définissez la propriété NumberGroupSeparator . (Si vous souhaitez formater les nombres en utilisant des formats monétaires, vous devez remplacer CurrencyGroupSeparator à la place/également.) Utilisez-les comme informations de format pour vos appels vers string.Format etc, et ça devrait aller. Par exemple:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        NumberFormatInfo nfi = (NumberFormatInfo)
            CultureInfo.InvariantCulture.NumberFormat.Clone();
        nfi.NumberGroupSeparator = " ";

        Console.WriteLine(12345.ToString("n", nfi)); // 12 345.00
    }
}
71
Jon Skeet

Créez votre propre NumberFormatInfo (dérivé) avec un séparateur de milliers différent.

8
Lucero

Il existe une version légèrement plus simple de Jon Skeet:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        NumberFormatInfo nfi = new NumberFormatInfo {NumberGroupSeparator = " ", NumberDecimalDigits = 0};

        Console.WriteLine(12345678.ToString("n", nfi)); // 12 345 678
    }
}

Et l'initialisation 'nfi' pourrait être ignorée et placée directement comme paramètre dans la méthode ToString ().

5
Invvard

Manière la plus simple ...

num.ToString("### ### ### ### ##0.00")
2
Gordon Bell