C # Creación de un NumberFormatInfo a la pantalla “libre” cuando un valor de la moneda es $ 0.00
-
28-09-2019 - |
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
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");
}
}