Usuário com melhor resposta
Formatando números do Microsoft Visual C++ 2008

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!
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 Snippetint 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 Snippetint 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.aspxAbraços,
Caio Proiete
Caio Proiete
http://www.caioproiete.com -
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 Snippetint 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 -
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
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 Snippetint 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 Snippetint 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.aspxAbraços,
Caio Proiete
Caio Proiete
http://www.caioproiete.com -
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?
-
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 Snippetint 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 -
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?
-
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 -