C # Creación de un NumberFormatInfo a la pantalla “libre” cuando un valor de la moneda es $ 0.00

StackOverflow https://stackoverflow.com/questions/3866796

Pregunta

Necesito mostrar una moneda en mi aplicación ASP.NET MVC pero cuando la moneda es 0 me gustaría que para mostrar "libre" (localizada por supuesto!) En lugar de $ 0,00.

Así que cuando tengo algo como esto ...

Decimal priceFree = 0.00;
Decimal priceNotFree = 100.00;

priceFree.ToString("C");
priceNotFree.ToString("C");

La salida es "$ 0.00" "$ 100.00"

Me gustaría que fuera "Gratis" "$ 100.00"

Me imagino que puedo utilizar el .ToString (formato de cadena, IFormatProvider formatProvider) método para lograr esto, pero no estoy seguro de cómo hacerlo. Obvio que desea volver a utilizar la mayor cantidad de NumberFormatInfo posible y sólo anularlo cuando la entrada es 0. En ese caso, puede vuelta sencilla a un recurso localizado que contiene mi cadena "libre".

Entonces, ¿cómo lo hago?

Gracias

¿Fue útil?

Solución

Creo que la forma más fácil de ir sería un método de extensión:

public static string ToPriceString(this decimal value) 
{
    if (value <= 0m) 
        return "Free"; // Your localized resource
    else 
        return value.ToString("C");
}

Si usted quiere ir con el IFormatProvider, hay una buen ejemplo en MSDN .

Otros consejos

Uso

.ToString("$###.00;;Free")

¿Qué tal un método de extensión:

public static string FreeString(this decimal dec)
{
   if(dec == 0M)
   {
      return "Free";
   }
   else
   {
      return dec.ToString("C");
   }
}

Entonces

priceFree.FreeString();
priceNotFree.FreeString();

En lugar de utilizar un IFormatProvider personalizada y pasando cada vez, ¿qué tal esto:

 public static class MyFormatter
    {
        public static string ToFreeString(this decimal d)
        {
            return d == 0 ? "Free" : d.ToString("d");
        }
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top