Domanda

Sto cercando di convertire i numeri in forma 123456 a 123,456 che trovo abbastanza facile utilizzando il metodo .NET ToString () con un formato personalizzato di N0.

Tuttavia, in un caso di dati che sto ottenendo strani formati durante l'utilizzo di questo metodo.

In questo caso sto generando un DataTable in modo dinamico per la mia tabella di input per testare il codice.

DataTable dt = new DataTable();

dt.Columns.Add("Cases", typeof(Int32));

Per esempio il mio dati assomiglia a questo prima formattazione viene applicata.

--------------------------------------------
| Cases | 2495 | 3937 | 3207 | 4173 | 4265 |
--------------------------------------------

Vorrei farlo sembrare come questo.

-------------------------------------------------
| Cases | 2,495 | 3,937 | 3,207 | 4,173 | 4,265 |
-------------------------------------------------

I provare a formattarla utilizzando il codice in questo modo.

output.Rows[r][c] = Convert.ToInt32(input.Rows[c - 1][r + 1]).ToString("N0");

(Nota:. Il motivo della strana formattazione è perché sto prendendo un DataTable e trasporre in un'altra DataTable)

Uso della formattazione sopra io ora ottenere i seguenti dati restituiti.

--------------------------------------------------------------------------
| Cases | 01/02/0495 | 01/03/0937 | 01/03/0207 | 01/04/0173 | 01/04/0265 |
--------------------------------------------------------------------------

Poi ho provato con un decimale utilizzando:

output.Rows[r][c] = Convert.ToInt32(input.Rows[c - 1][r + 1]).ToString("N01");

Il che mi ha dato il seguente risultato.

------------------------------------------------------
| Cases | 2495.0 | 3937.0 | 3207.0 | 4173.0 | 4265.0 |
------------------------------------------------------

Questo mi ha confuso ora, perché è accettare il fatto che il numero può essere formattato in questo modo.

La prossima cosa che ho provato è stato diversi modi di formattare stringhe in questo modo.

output.Rows[r][c] = string.Format("{0:N0}", input.Rows[c - 1][r + 1]);
output.Rows[r][c] = Convert.ToInt32(input.Rows[c - 1][r + 1]).ToString("#,##0");

Nessuno di questi danno il formato numerico come vorrei neanche. Qualcuno può consigliare dove sto andando male? E 'così semplice che ho perso il punto?

È stato utile?

Soluzione

Mi sembra semplicemente che hai impostato il tipo di dati delle colonne nel DataTable in modo non corretto. Prova che lo rende esplicito come int (sembra DateTime al momento).

Inoltre - il lavoro del DataTable è quello di tenere di dati; non disply esso. Si potrebbe conservarla pre-formattato come strings, immagino (fino a quando si dici è che le colonne sono stringhe) - ma se si archiviano come int, poi dimenticare il display; non appena è stato eseguito Convert.ToInt32 il tuo lavoro è finito. Come appare è il lavoro del DataGridView (o altro); dire che di "N0" ...

Altri suggerimenti

Prova a usare semplicemente "N" come in ToString ( "N");

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top