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