Question

Je suis en train de convertir des nombres sous la forme 123456 à 123456 que je trouve assez facile en utilisant la méthode ToString .NET () avec un format personnalisé de N0.

Cependant, dans un cas de données que je reçois des formats étranges tout en utilisant cette méthode.

Dans ce cas, je suis la génération d'un DataTable dynamique pour ma table d'entrée pour tester le code.

DataTable dt = new DataTable();

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

Par exemple mes données ressemble à ceci avant le formatage est appliqué.

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

Je voudrais qu'il ressemble à cela.

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

J'essaie de le formater en utilisant le code comme ceci.

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

(Note:. La raison de la mise en forme étrange est parce que je prends un DataTable et transposer à un autre DataTable)

En utilisant le formatage ci-dessus je reçois les données suivantes retourné maintenant.

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

J'ai ensuite essayé avec un point décimal en utilisant:

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

Ce qui m'a donné le résultat suivant.

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

Cela m'a maintenant confus parce qu'il est d'accepter le fait que le nombre peut être formaté de cette façon.

La prochaine chose que j'ai essayé était différentes façons de le formatage des chaînes comme ainsi.

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");

Aucun de ceux-ci donnent le format numérique que je voudrais soit. Quelqu'un peut-il indiquer où je me trompe? Est-ce si simple que je l'ai manqué le point?

Était-ce utile?

La solution

Il me semble simplement que vous avez défini les données de type des colonnes dans le DataTable de manière incorrecte. Essayez de faire explicite comme int (il ressemble à DateTime pour le moment).

En outre - le travail du DataTable est de maintenez la touche données; pas disply il. Vous pouvez stocker préformaté comme strings, je suppose (aussi longtemps que vous tell ce que les colonnes sont des chaînes) - mais si vous stockez comme int, puis oublier l'affichage; dès que vous avez exécuté Convert.ToInt32 votre travail est terminé. Comment il apparaît est le travail du DataGridView (ou autre); dire que de "N0" ...

Autres conseils

Essayez d'utiliser simplement "N", comme dans ToString ( "N");

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top