none
Formatando números do Microsoft Visual C++ 2008 RRS feed

  • Pergunta

  •  

     

    Pessoal, alguém sabe como formatar número no VC++ 2008?

     

    Eu preciso formatar um numero por exemplo:

    1

    2

    3

    4

    etc..

     

    Para:

    001

    002

    003

    004

    etc..

     

    Eu tentei usar o GetNumberFormat mas só estou conseguindo para formato de moeda e não é esse formato que quero.

     

    Agradesço desde já pela ajuda de todos!

    quinta-feira, 22 de janeiro de 2009 18:58

Respostas

  • Olá William,

     

    No Visual C++ 2008, é possível desenvolver em C++ nativo e em C++ gerenciado (C++/CLI)...

    Qual dos dois você está utilizando? Ainda, você utiliza MFC? ATL? Que bibliotecas tem disponíveis?

     

    Existem 1001 maneiras de formatar números, e cada uma das bibliotecas funciona de um jeito diferente.

     

    Se estiver utilizando C++ nativo, pode utilizar a função sprintf, ou sprintf_s, definindo o formato %03i, que indica que você quer formatar um número inteiro com, pelo menos, três caracteres, completando com 0s (zeros) à esquerda quando necessário:

     

    Code Snippet

     

     int numero = 1;

     

     // Buffer para armazenar o número formatado 

     char numeroFormatado[4];

     

     // Formata o número utilizando o formato 000

     sprintf_s(numeroFormatado, sizeof(numeroFormatado), "%03i", numero);

     

     // Mostra o número (apenas para ilustrar)

     printf("%s\n", numeroFormatado);

     

     

     

    ---

     

    Já se estiver utilizando C++/CLI, pode utilizar o método Format da classe String, definindo o formato 000, que também indica que você quer um número com, pelo menos, três caracteres, completando com 0s (zeros) à esquerda se necessário:

     

    Code Snippet

     

     int numero = 1;

     

     // Formata o número utilizando o formato 000

     String^ numeroFormatado = String::Format(L"{0:000}", numero);

     

     // Mostra o número (apenas para ilustrar)

     Console::WriteLine(numeroFormatado);

     

     

    Para entender como definir os diferentes formatos que você pode no String::Format, sugiro a leitura da seção abaixo no MSDN:

     

    Formatting Types
    http://msdn.microsoft.com/en-us/library/fbxft59x.aspx

     

    Abraços,

    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    sexta-feira, 23 de janeiro de 2009 01:41
  •  William888 wrote:
    Eu utilizo o MFC e quero retornar o número formatado em uma caixa de mensagem MessageBox

    Você poderia me informar por que não funciona quando uso o String?

     

    Olá William,

     

    A classe String que utilizei acima faz parte do .NET Framework, e para utilizá-la você precisaria estar desenvolvendo uma aplicação CLR Windows Forms...

     

    A MFC oferece a classe CString, que por sua vez oferece um método chamado Format, e que permite utilizar os mesmos formatos da antiga sprintf:

     

    Code Snippet

     

     int numero = 1;

     

     // Variável para armazenar o número formatado

     CString numeroFormatado;

     

     // Formata o número utilizando o formato 000

     numeroFormatado.Format(L"%03i", numero);

     

     // Mostra o número (apenas para ilustrar)

     MessageBox(numeroFormatado, L"Número Formatado", 0);

     

     

    Abraços,

    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    sexta-feira, 23 de janeiro de 2009 12:02
  •  William888 wrote:
    Muito legal essa dica, funcionou perfeitamente Caio, você sabe se tem como formatar no caso de projetos do tipo Win32 usando o Template - Win32 Project sem usar o MFC e o ATL é possível formatar dessa mesma forma que eu quero? Se sim, como faço?

     

    Se você não tem MFC nem ATL, então você só tem o char[] disponível... Deveria utilizar o primeiro exemplo que mostrei lá em cima.

     

    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    sexta-feira, 23 de janeiro de 2009 12:46

Todas as Respostas

  • Olá William,

     

    No Visual C++ 2008, é possível desenvolver em C++ nativo e em C++ gerenciado (C++/CLI)...

    Qual dos dois você está utilizando? Ainda, você utiliza MFC? ATL? Que bibliotecas tem disponíveis?

     

    Existem 1001 maneiras de formatar números, e cada uma das bibliotecas funciona de um jeito diferente.

     

    Se estiver utilizando C++ nativo, pode utilizar a função sprintf, ou sprintf_s, definindo o formato %03i, que indica que você quer formatar um número inteiro com, pelo menos, três caracteres, completando com 0s (zeros) à esquerda quando necessário:

     

    Code Snippet

     

     int numero = 1;

     

     // Buffer para armazenar o número formatado 

     char numeroFormatado[4];

     

     // Formata o número utilizando o formato 000

     sprintf_s(numeroFormatado, sizeof(numeroFormatado), "%03i", numero);

     

     // Mostra o número (apenas para ilustrar)

     printf("%s\n", numeroFormatado);

     

     

     

    ---

     

    Já se estiver utilizando C++/CLI, pode utilizar o método Format da classe String, definindo o formato 000, que também indica que você quer um número com, pelo menos, três caracteres, completando com 0s (zeros) à esquerda se necessário:

     

    Code Snippet

     

     int numero = 1;

     

     // Formata o número utilizando o formato 000

     String^ numeroFormatado = String::Format(L"{0:000}", numero);

     

     // Mostra o número (apenas para ilustrar)

     Console::WriteLine(numeroFormatado);

     

     

    Para entender como definir os diferentes formatos que você pode no String::Format, sugiro a leitura da seção abaixo no MSDN:

     

    Formatting Types
    http://msdn.microsoft.com/en-us/library/fbxft59x.aspx

     

    Abraços,

    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    sexta-feira, 23 de janeiro de 2009 01:41
  • Bom dia Caio,

     

    Você colocou um exemplo que eu estava com problemas antes mas deixei de lado referente ao String, sempre que uso em qualquer projeto feito no VC++ 2008 dá uma mensagem:

     

    1>d:\teste\teste.cpp(39) : error C2065: 'String' : undeclared identifier

     

    Eu utilizo o MFC e quero retornar o número formatado em uma caixa de mensagem MessageBox eu não uso o printf("%s\n", numeroFormatado); porque só funciona em Console.

     

    Você poderia me informar por que não funciona quando uso o String?

    sexta-feira, 23 de janeiro de 2009 10:59
  •  William888 wrote:
    Eu utilizo o MFC e quero retornar o número formatado em uma caixa de mensagem MessageBox

    Você poderia me informar por que não funciona quando uso o String?

     

    Olá William,

     

    A classe String que utilizei acima faz parte do .NET Framework, e para utilizá-la você precisaria estar desenvolvendo uma aplicação CLR Windows Forms...

     

    A MFC oferece a classe CString, que por sua vez oferece um método chamado Format, e que permite utilizar os mesmos formatos da antiga sprintf:

     

    Code Snippet

     

     int numero = 1;

     

     // Variável para armazenar o número formatado

     CString numeroFormatado;

     

     // Formata o número utilizando o formato 000

     numeroFormatado.Format(L"%03i", numero);

     

     // Mostra o número (apenas para ilustrar)

     MessageBox(numeroFormatado, L"Número Formatado", 0);

     

     

    Abraços,

    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    sexta-feira, 23 de janeiro de 2009 12:02
  • Muito legal essa dica, funcionou perfeitamente Caio, você sabe se tem como formatar no caso de projetos do tipo Win32 usando o Template - Win32 Project sem usar o MFC e o ATL é possível formatar dessa mesma forma que eu quero? Se sim, como faço?
    sexta-feira, 23 de janeiro de 2009 12:29
  •  William888 wrote:
    Muito legal essa dica, funcionou perfeitamente Caio, você sabe se tem como formatar no caso de projetos do tipo Win32 usando o Template - Win32 Project sem usar o MFC e o ATL é possível formatar dessa mesma forma que eu quero? Se sim, como faço?

     

    Se você não tem MFC nem ATL, então você só tem o char[] disponível... Deveria utilizar o primeiro exemplo que mostrei lá em cima.

     

    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    sexta-feira, 23 de janeiro de 2009 12:46
  • Eu só clicava no sim, tinha esquecido de clicar em marcar como resposta.

    Consegui dessa forma também, obrigado mais uma vez Caio.

    sexta-feira, 23 de janeiro de 2009 13:21