Oddity com ToString () formatação de número personalizado
Pergunta
Eu estou tentando converter números na forma 123456 a 123456 que eu acho bastante fácil usando o método .NET ToString () com um formato personalizado de N0.
No entanto, em um caso de dados que eu estou recebendo formatos estranhos enquanto utilizando este método.
Neste caso, eu estou gerando um DataTable dinamicamente para minha mesa de entrada para testar o código.
DataTable dt = new DataTable();
dt.Columns.Add("Cases", typeof(Int32));
Por exemplo meus olhares de dados como este antes de formatar é aplicada.
-------------------------------------------- | Cases | 2495 | 3937 | 3207 | 4173 | 4265 | --------------------------------------------
Eu gostaria que se parecesse com isto.
------------------------------------------------- | Cases | 2,495 | 3,937 | 3,207 | 4,173 | 4,265 | -------------------------------------------------
Eu tento formatá-lo usando um código como isso.
output.Rows[r][c] = Convert.ToInt32(input.Rows[c - 1][r + 1]).ToString("N0");
. (Nota: A razão para a formatação estranha é porque eu estou tomando um DataTable e transpondo-o para outra DataTable)
Usando o acima formatação Eu agora obter os seguintes dados retornado.
-------------------------------------------------------------------------- | Cases | 01/02/0495 | 01/03/0937 | 01/03/0207 | 01/04/0173 | 01/04/0265 | --------------------------------------------------------------------------
Então eu tentei com um ponto decimal usando:
output.Rows[r][c] = Convert.ToInt32(input.Rows[c - 1][r + 1]).ToString("N01");
O que me deu o seguinte resultado.
------------------------------------------------------ | Cases | 2495.0 | 3937.0 | 3207.0 | 4173.0 | 4265.0 | ------------------------------------------------------
Isto já me confundiu porque é aceitar o fato de que o número pode ser formatado desta forma.
A próxima coisa que eu tentei foi maneiras diferentes de formatar cordas assim.
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");
Nenhum destes dar o formato de número como eu gostaria também. Alguém pode aconselhar onde estou indo errado? É tão simples que eu perdi o ponto?
Solução
Parece-me simplesmente que você defina o tipo de dados das colunas na DataTable
incorretamente. Tentar torná-lo explícito como um int
(parece DateTime
no momento).
Além disso - o trabalho do DataTable
é hold dados; não disply-lo. Você pode armazená-lo pré-formatado como string
s, eu acho (contanto que você dizer -se que as colunas são cadeias) - mas se você está armazenando-o como int
, em seguida, esquecer a exibição; tão logo você ter executado Convert.ToInt32
seu trabalho é longo. Como ele aparece é o trabalho do DataGridView
(ou qualquer outro); dizer que sobre "N0" ...
Outras dicas
Tente usar simplesmente "N", como em ToString ( "N");