2009-04-15 9 views
31

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 je dois définir une culture personnalisée, mais je ne semble pas avoir raison. Des pointeurs?Utiliser un séparateur de milliers personnalisé en C#

par exemple: affichage 1000000 que 1 000 000 au lieu de 1.000.000

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

+0

Quel est le problème avec l'utilisation de String.Replace()? –

+1

@Jon B - car Remplacer ne serait pas indépendant de la culture. Que faire si vous exécutez sur un ordinateur où se trouve le mille sépulture. ? –

+0

et puisque je suis déjà en train de formater le nombre, il serait encombrer le code – Luk

Répondre

63

Je vous suggère de trouver un NumberFormatInfo qui correspond le mieux ce que vous voulez (c'est-à-dire juste en dehors du séparateur des milliers), appelez le Clone() et définissez la propriété NumberGroupSeparator. (Si vous voulez formater les nombres en utilisant des formats de devises, vous devez également changer CurrencyGroupSeparator.) Utilisez cela comme information de format pour vos appels à string.Format etc, et tout devrait bien se passer. 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 
    } 
} 
+0

@Jon: Vous êtes si rapide ... mais généralement au point et exact. – Lucero

+0

Cette marque Skeet LoadBalancer a des problèmes de routage? –

+0

Wow, merci Jon! – Luk

1

manière la plus simple ...

num.ToString("### ### ### ### ##0.00") 
+5

Bien que cela fonctionne, il va effectivement produire des espaces devant le numéro. Par exemple le nombre 1 aurait 4 espaces devant lui. Donc, au moins, vous devrez le couper. Je pense que la meilleure solution est d'ajuster NumberFormatInfo si vous voulez remplacer le format par défaut de Culture. – Johncl

4

Il y a une version légèrement plus simple de Jon Skeet un:

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 mis directement en tant que paramètre dans le ToString() méthode.

+0

C'est en gros la réponse de John Skeet réécrite. Pas vraiment créatif ou plus court! –

Questions connexes