2009-02-12 13 views
13

Estoy tratando de usar String.Format ("{0: c}", somevalue) en C#, pero estoy teniendo dificultades para averiguar cómo configurar la salida a satisfacer mis necesidades Aquí están mis necesidades:Necesito un formato de moneda personalizado para usar con String.Format

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

I Probé 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.

+0

if (money> 0) texto de salida; – MrFox

Respuesta

19

Si utiliza

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

Usted recibirá "" para el valor cero y los otros valores debe ser formateado correctamente también.

+0

Esto es lo que he estado buscando. Estoy formateando en un repetidor y quería algo simple y conciso. – Notorious2tall

+0

La respuesta de Andrew también funcionó y si yo estuviera haciendo esto en código subyacente, me habría ido con su solución y ni siquiera trataría de descubrir el String.Format. Pero estaba buscando la solución elegante. No es que nadie haya podido leer mi opinión sobre eso. :) – Notorious2tall

+0

+1 de mí ... excelente ... ¿podría explicarme detalladamente cómo funciona esto? –

4

intentar algo como esto:

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

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

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

Los formatos de moneda "C" son grandes hasta que necesite un espacio en blanco para 0. Aquí hay dos maneras, uno se mencionó anteriormente, similares a las que yo 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 lo hago).

Cuestiones relacionadas