c# currency string.format

c# - Necesita un formato de moneda personalizado para usar con String.Format



currency (5)

Estoy intentando usar String.Format ("{0: c}", somevalue) en C #, pero estoy teniendo dificultades para encontrar la manera de configurar la salida para satisfacer mis necesidades. Aquí están mis necesidades:

  1. 0 salidas en blanco
  2. 1.00 salidas a $ 1.00
  3. 10.00 salidas a $ 10.00
  4. 100.00 salidas a $ 100.00
  5. 1000.00 salidas a $ 1,000.00

He intentado String.Format ("{0: c}", somevalue) pero para valores cero da como resultado $ 0.00, que no es lo que quiero. También probé String.Format ("{0: $ 0,0.00; $ (0,0.00); #}", somevalue), pero para 1.0 genera $ 01.00. String.Format ("{0: $ 0.00; $ (0.00); #}", somevalue) funciona para la mayoría de los casos, pero cuando somevalue es 1000.00 el resultado es $ 1000.00.

¿Hay algún formato que se ajuste a los 5 casos anteriores? Toda la documentación que he leído solo detalla los conceptos básicos y no toca este tipo de escenario.


Dependiendo de si está utilizando sistemáticamente el mismo tipo de datos para todos los valores de su moneda, puede escribir un método de extensión que lo haga para que su caso siempre se cumpla. Por ejemplo, si estuviera usando el tipo decimal:

public static string ToCurrencyString (this decimal value) { if (value == 0) return String.Empty; return value.ToString ("C"); }


Pruebe algo como esto:

String currency = (number == 0) ? String.Empty : number.ToString("c");


Si utiliza

string.Format("{0:$#,##0.00;($#,##0.00);''''}", value)

Obtendrá "" para el valor cero y los demás valores también se formatearán correctamente.



Los formatos de moneda "C" son geniales hasta que necesite un espacio en blanco para 0. Aquí hay dos formas, una mencionada anteriormente, similar a las que uso que le dan el espacio en blanco para 0:

// one way string.Format("{0:$#,##0.00;($#,##0.00);''''}", somevalue) // another way somevalue.ToString("$#,##0.00;($#,##0.00);''''")

La segunda técnica se siente más "fluida", si te gusta ese estilo de código (como yo).