10 mayo 2012

Mejora del articulo hecho para C Sharp: Función que acorta una cifra decimal para sólo mostrar dos números. Y ahora además, pone puntos de separación

  Este código es una mejora del que escribí aquí. Pero esta vez, también puntua los miles.

   private string FormatearNumero(decimal cifra )
        {
             string strCifra = Convert.ToString(cifra);
             int dondeestalacoma = strCifra.IndexOf(',');
             string partedecimal="";
             string parteentera="";
             if (dondeestalacoma != -1)
             {
                 if (strCifra.Length > (dondeestalacoma + 2))
                 {
                     partedecimal = strCifra.Substring(dondeestalacoma + 1, 2);
                     parteentera = strCifra.Substring(0, dondeestalacoma);
                 }

             }
             else
             {
                 parteentera = Convert.ToString(cifra);
                 partedecimal = ",00";
               
             }

             /*colocación de los puntos de miles*/
            /*1º Creo un arraylist. En él se introcunen los numeros y los puntos de separación. Empiezo la extración desde el último dígito de la variable parte entera.
             2º En la var. nuevonumero voy metiendo los trozos que en el paso 1 metí en el arraylist
             3 Colocación de los primeros numeros de la cifra parteentera*/
            
             ArrayList diferentespartesnumero = new ArrayList();
             int numerodepuntos = 0;
             if (parteentera.Length > 3)
             {
                 for (int i = parteentera.Length; i > 3; i -= 3)
                 {
                     string trozo = parteentera.Substring(i - 3, 3);
                     diferentespartesnumero.Add(trozo);
                     diferentespartesnumero.Add(".");
                     numerodepuntos++;
                 }

                 string nuevonumero = "";

                 for (int j = diferentespartesnumero.Count - 1; j >= 0; j--)
                     nuevonumero += diferentespartesnumero[j].ToString();

                 int resto = (parteentera.Length + numerodepuntos) - nuevonumero.Length;
                 if (resto > 0 & resto <= 3)
                 {

                     string aux2 = parteentera.Substring(0, resto);
                     parteentera = aux2 + nuevonumero;
                 }
                 else
                     parteentera = nuevonumero.Substring(1, nuevonumero.Length - 1);

                 /**/
                 
             }
            return strCifra = parteentera + "," + partedecimal;
        }
   

No hay comentarios:

Publicar un comentario