2013-07-08 11 views
23

Si supponga Ho il seguente numero decimale che devo formattare in modo che ogni mille dovrebbero essere separati da uno spazio:Come faccio a separare le migliaia con lo spazio in C#

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

ho provato Decimal.ToString (" 0 000,00 "). Anche se questo funziona abbastanza bene quando il numero è 1897.11. Ma quando è 897.11 ottengo 0 897.11.

risposta

46

Passare in una personalizzata NumberFormatInfo con un numero personalizzato NumberGroupSeparator property e utilizzare per indicare di eseguire gruppi di numeri. Questo esempio usa come base il formato numerico della cultura invariante.

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

+1, ho modificato questa risposta per gestire correttamente i valori zero - la stringa di formato precedente "#, #. 00" ha causato zero da rappresentare come ".00" ora è "0.00" – n00b

5

con un custom format string, ma utilizzare '#' non '0' a 0 è un token obbligatorio che sarà lì non importa per quanto tempo il numero è, il cancelletto (#) è token opzionale, sarà usato solo per cifre in realtà nel numero.

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

NOTA. Lascerò questo qui, ma la risposta di @Tim S 'è migliore.

Quando provo questo vedo che genera solo il primo separatore ... Immagino che il separatore funzioni solo per virgole e punti qui. Come soluzione alternativa (fino al numero massimo di dimensioni previsto), prova invece.

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

Per '1234897.11' questo risulta in' 1234 897.11' (ovvero separa solo il primo gruppo). –

+0

@Tim, sembra un errore nel codice framework.vedi la mia modifica –

+2

@Tin S risposta è migliore della mia. Non sapevo che esistesse 'NumberFormatInfo ' –

4

provare questo

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

Verrà ricevuto: 134 566 548,00

Non dimenticate la vostra cultura.

13

Hai bisogno di un provider personalizzato formato numerico in cui si cambia il carattere da soli:

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

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

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

Qui ho anche specificare formattarlo come un numero (utilizzando "n"), si prega di consultare questo link per altre formattazioni opzioni:

Standard Numeric Format Strings

In questo caso, non funzionerà se si formatta come valuta o una percentuale, perché un Si può già notare che lo NumberFormatInfo ha proprietà separate per quelli.

Le informazioni sul formato cultura corrente sono disponibili su System.Globalization.CultureInfo.CurrentCulture.NumberFormat.

0

locale norvegese utilizza gli spazi come separatore, quindi se state progettando un sito web o un'applicazione specifica per i norvegesi, allora si potrebbe utilizzare:

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

che si traduce in

"123 897,11" 

Ovviamente, se non stai scrivendo un'applicazione per il mercato norvegese, allora questa sarebbe una soluzione sciocca.

Problemi correlati