C # Создание пользовательского NUMBERFORMATINFO для отображения «бесплатно», когда стоимость валюты составляет $ 0,00
-
28-09-2019 - |
Вопрос
Мне нужно отобразить валюту в моем приложении MVC MVC ASP.NET, но когда валюта 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) для достижения этого, но я не уверен, как пойти об этом. Очевидно, что я хочу использовать максимально использовать как можно больше повторно и переопределить его, когда вход в этот случай, я могу просто вернуть локализованный ресурс, который содержит мою «бесплатную» строку.
Так как мне это сделать?
Спасибо
Решение
Я думаю, что самый простой способ пойти было бы методом расширения:
public static string ToPriceString(this decimal value)
{
if (value <= 0m)
return "Free"; // Your localized resource
else
return value.ToString("C");
}
Если вы хотите пойти с IFormatProvider
, Есть хороший пример на MSDN.
Другие советы
Использовать
.ToString("$###.00;;Free")
Как насчет метода расширения:
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");
}
}