×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: C++
Posted by: jeremias trindade
Added: May 6, 2015 9:19 PM
Views: 20
Tags: no tags
Esta função formata um número, acrescentando-lhe separadores de milhares
  1. /*
  2.  * Esta função formata um número, acrescentando-lhe separadores de milhares
  3.  *
  4.  * @param iNumber: O número que deve ser formatado
  5.  * @param pOut:    O bloco de memoria onde será posto o resultado
  6.  */
  7. void formatNumber(int iNumber, char *pOut)
  8. {
  9.         char *pCh, *pRs;                        // Ponteiros para os buffers locais
  10.         char buffer[20];                        // Buffer onde o número será transformado em string
  11.         char result[20];                        // Buffer onde o resultado será construído
  12.         int iSize, iJump, iDotOrNum;
  13.  
  14.         pCh = buffer;                           // Inicializa os ponteiros
  15.         pRs = result;                           //
  16.         iDotOrNum = 0;                          // Flag de controle
  17.  
  18.         sprintf_s(buffer, "%d", iNumber);       // Transforme o número em uma string
  19.         iSize = strlen(&buffer[0]);             // Obtenha o tamanho
  20.         iJump = iSize % 3;                      // Quantos dígitos sobrarão?
  21.  
  22.         memcpy(result, buffer, iJump);          // Escreva os dígitos que sobrarão
  23.         pCh += iJump;                           // Avançar ponteiros
  24.         pRs += iJump;                           //
  25.  
  26.         while (*pCh != '\0')                    // Enquanto não chegarmos ao fim da string
  27.         {
  28.                 if (iDotOrNum++ % 4 == 0)       // Se a flag for um número par
  29.                 {
  30.                         *pRs++ = '.';           // ... escreva um ponto
  31.                 }
  32.                 else
  33.                 {
  34.                         *pRs++ = *pCh++;        // ... senão escreva o próximo dígito
  35.                 }
  36.         }
  37.  
  38.         *pRs = '\0';                            // Complete a string com o caractere NULL
  39.         pRs = result;                           // Aponte para o início da string
  40.         if (iJump == 0)                         // Se houver um ponto pentelho
  41.         {
  42.                 pRs++;                          // ... se livra dele avançando o ponteiro
  43.         }
  44.  
  45.         iSize = strlen(pRs);                    // Qual o tamanho do número formatado?
  46.         memcpy(pOut, pRs, iSize + 1);           // Copia o número para o buffer de saída, sem esqueçer o caractere NULL
  47. }
  48.