2009-04-15 37 views
31

Sto tentando di non utilizzare il carattere "," come separatore delle migliaia quando si visualizza una stringa, ma di utilizzare invece uno spazio. Credo di aver bisogno di definire una cultura personalizzata, ma non mi sembra corretto. Qualche indicazione?Utilizzare un separatore di migliaia personalizzato in C#

ad esempio: esposizione 1000000 da 1 000 000 invece di 1.000.000

(no, String.Replace() non è la soluzione che vorrei utilizzare: P)

+0

Cosa c'è di sbagliato nell'uso di String.Replace()? –

+1

@ Jon B - perché Replace non sarebbe indipendente dalla cultura. Che cosa succede se sei in esecuzione su un computer in cui è il mille settembre. ? –

+0

e dal momento che sto già formattando il numero, sarebbe ingombrante il codice – Luk

risposta

63

vi suggerisco di trovare un NumberFormatInfo che più si avvicina quello che vuoi (vale a dire è a parte il separatore di migliaia), chiama Clone() su di esso e quindi imposta la proprietà NumberGroupSeparator. (Se intendi formattare i numeri utilizzando i formati di valuta, devi cambiare anche CurrencyGroupSeparator). Usa come informazioni di formato per le tue chiamate su string.Format ecc. E dovresti stare bene. Per esempio:

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: Sei così veloce ... ma di solito al punto ed esatto. – Lucero

+0

Quel marchio Skeet LoadBalancer ha problemi di routing? –

+0

Wow, grazie Jon! – Luk

1

modo più semplice ...

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

Sebbene funzioni, produrrà effettivamente spazi davanti al numero. Ad esempio il numero 1 avrebbe 4 spazi davanti ad esso. Quindi almeno dovrai tagliarlo. Penso che la soluzione migliore sia quella di regolare NumberFormatInfo se si vuole sovrascrivere il formato predefinito di Cultura. – Johncl

4

C'è una versione leggermente più semplice di Jon Skeet uno:

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 
    } 
} 

E l'inizializzazione 'NFI' potrebbe essere saltata e messo direttamente come parametro nella ToString() metodo.

+0

Questa è fondamentalmente la risposta di John Skeet riscritta. Non esattamente creativo o più corto! –

Problemi correlati