c # decimal a cadena para moneda

Para mostrar una moneda hacemos:

ToString("0.##") 

Para el valor 5.00 la salida es:

 5 

Para el valor 5.98 la salida es:

 5.98 

Para el valor 5.90 la salida es:

 5.9 

Necesito que el tercer caso salga con 2 puntos decimales, por ejemplo:

 5.90 

¿Cómo puedo hacer esto sin que esto afecte los otros resultados?

Sé que esto no le da un formato que solucione el problema, pero es una solución simple para solucionarlo.

 (5.00).ToString("0.00").Replace(".00",""); // returns 5 (5.90).ToString("0.00").Replace(".00", ""); // returns 5.90 (5.99).ToString("0.00").Replace(".00", ""); // returns 5.99 

Podrías usar un método de extensión, algo como esto:

 public static string ToCurrencyString(this decimal d) { decimal t = Decimal.Truncate(d); return d.Equals(t) ? d.ToString("0.##") : d.ToString("#, ##0.00") } 

Tratar:

 s.ToString("#,##0.00") 

O solo:

 s.ToString("C") 

No conozco ninguna forma integrada de expandir los dos decimales solo cuando ambos no son cero. Probablemente solo usaría una sentencia if para eso.

 int len = s.Length; if (s[len - 2] == '0' && s[len - 1] == '0') s = s.Left(len - 3); 

# significa que si no hay un número, déjelo vacío 0 significa poner un 0 si no hay un número

ToString (“0.00”)

No estoy seguro de si me estoy perdiendo algo, pero no puedes hacer esto:

 decimal moneyvalue = 1921.39m; string html = String.Format("Order Total: {0:C}", moneyvalue); Console.WriteLine(html); 

Simplemente use myDecimal.ToString("N") ,

Con el parámetro “N” se transformará el decimal en una cadena, y la cantidad de decimales que se mostrarán se definirá por la configuración de SO.

https://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.numberdecimaldigits(v=vs.110).aspx