web-dev-qa-db-fra.com

Comment pourrais-je séparer des milliers d'espaces en C #

Supposons que je dois formater le nombre décimal suivant pour que chaque mille soit séparé par un espace:

 897.11 to 897.11
 1897.11 to 1 897.11
 12897.11 to 12 897.11
 123897.11 to 123 897.11

J'ai essayé Decimal.ToString ("0 000.00"). Bien que cela fonctionne assez bien quand le nombre est 1897.11. Mais quand il est 897.11 je reçois 0 897.11. 

27
Mikayil Abdullayev

Transmettez un NumberFormatInfo personnalisé avec une propriété NumberGroupSeparator personnalisée et utilisez le format #,# pour lui indiquer de faire des groupes de nombres. Cet exemple utilise le format numérique de la culture invariante comme base.

var nfi = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();
nfi.NumberGroupSeparator = " ";
string formatted = 1234897.11m.ToString("#,0.00", nfi); // "1 234 897.11"
54
Tim S.

Vous avez besoin d'un fournisseur de format de numéro personnalisé dans lequel vous modifiez le personnage vous-même:

    static void Main(string[] args)
    {
        decimal d = 2000000;

        var f = new NumberFormatInfo {NumberGroupSeparator = " "};

        var s = d.ToString("n", f); // 2 000 000.00
    }

Ici, je spécifie également le formater en tant que nombre (en utilisant "n"), veuillez consulter ce lien pour connaître les autres options de formatage:

Chaînes de format numérique standard

Dans ce cas, cela ne fonctionnera pas si vous formatez en devise ou en pourcentage, car vous remarquerez peut-être que la variable NumberFormatInfo a des propriétés distinctes pour ces options.

Les informations sur le format de culture actuel sont disponibles sur System.Globalization.CultureInfo.CurrentCulture.NumberFormat.

17
Adam Houldsworth

avec un chaîne de format personnalisée , mais utilisez '#' et non '0's un 0 est un jeton obligatoire, il sera toujours présent quel que soit le nombre, le signe dièse (#) est un jeton facultatif, il ne sera que utilisé pour les chiffres réellement dans le nombre. 

  Decimal.ToString("# ###.00")  

REMARQUE. Je vais laisser ça ici, mais la réponse de @Tim S est meilleure. 

Lorsque j'essaie, je vois qu'il génère uniquement le premier séparateur ... Je suppose que le séparateur ne fonctionne que pour les virgules et les points ici. En guise de solution de contournement (jusqu'à la taille maximale que vous attendez), essayez plutôt ceci.

  Decimal.ToString("# ### ### ### ###.00")  
6
Charles Bretana

essaye ça

int testNumber = 134566548;
Console.WriteLine(string.Format("{0:N}", testNumber));

Vous recevrez: 134 566 548,00

N'oublie pas ta culture.

6
Matthieu M

Les paramètres régionaux norvégiens utilisent des espaces en tant que séparateur. Ainsi, si vous conceviez un site Web ou une application spécialement pour les Norvégiens, vous pourriez utiliser:

(123897.11).ToString("n",new CultureInfo("nb-NO"))

Ce qui résulte en 

"123 897,11"

De toute évidence, si vous n’écrivez pas une application pour le marché norvégien, ce serait une solution idiote. 

1
Fiach Reid