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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top