Oddity avec ToString () mise en forme numérique personnalisé
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?
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 string
s, 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");