Formatear un decimal de forma dinámica

2636 vistas

En primer, lugar hay que saber que el decimal tiene un lÃmite, sólo puede mostrar 28 dígitos significativos. Más allá, la cifra se redondeará a este lÃmite.

En segundo lugar, el uso del método sobrecargado ToString() tiene un parámetro format (por ejemplo aquà de tipo "N") fijo. Esto es fastidioso cuando no podemos anticipar el número de cifras después de la coma.

Aquà proponemos la implementación de un método que permite determinar el formato N de forma dinámica. Por lo tanto, mostraremos el uso de la clase NumberFormatInfo.



csharp
  1. using System.Globalization;
  2. //...
  3. private static string SetFormat(Decimal d, NumberFormatInfo nfi)
  4. {
  5. string format = "N";
  6. string sep;
  7. sep = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
  8. try
  9.   {
  10.     string s = d.ToString();
  11.     int i = s.IndexOf(sep);
  12.     if(i >= 0){format += (s.Length - i - 1).ToString();}
  13.     else{format += 0.ToString();}   
  14.   }
  15. catch(Exception ex)
  16.   { Console.WriteLine(ex.Message);}
  17. return d.ToString(format,nfi);
  18. }