C# создание собственного NumberFormatInfo для отображения "Свободно", когда значение валюты составляет $0,00
Мне нужно отобразить валюту в моем приложении ASP.NET MVC, но когда валюта равна 0, я бы хотел, чтобы она отображала "Свободно" (локализовано, конечно!) Вместо 0,00 долларов.
Поэтому, когда у меня есть что-то вроде этого...
Decimal priceFree = 0.00;
Decimal priceNotFree = 100.00;
priceFree.ToString("C");
priceNotFree.ToString("C");
Выход составляет "$0,00" "$100,00"
Я хотел бы, чтобы это было "Свободно" "100,00 $"
Я полагаю, что я могу использовать метод.ToString(формат строки, IFormatProvider formatProvider) для достижения этой цели, но я не уверен, как это сделать. Очевидно, я хочу повторно использовать как можно большую часть NumberFormatInfo и переопределять его только при вводе 0. В этом случае я могу просто вернуть локализованный ресурс, содержащий мою "свободную" строку.
Так как мне это сделать?
Спасибо
4 ответа
Я думаю, что самый простой способ - это метод расширения:
public static string ToPriceString(this decimal value)
{
if (value <= 0m)
return "Free"; // Your localized resource
else
return value.ToString("C");
}
Если вы хотите пойти с IFormatProvider
Есть хороший пример на MSDN.
Как насчет метода расширения:
public static string FreeString(this decimal dec)
{
if(dec == 0M)
{
return "Free";
}
else
{
return dec.ToString("C");
}
}
затем
priceFree.FreeString();
priceNotFree.FreeString();
Вместо того, чтобы использовать пользовательский IFormatProvider и передавать его каждый раз, как об этом:
public static class MyFormatter
{
public static string ToFreeString(this decimal d)
{
return d == 0 ? "Free" : d.ToString("d");
}
}