C # Создание пользовательского NUMBERFORMATINFO для отображения «бесплатно», когда стоимость валюты составляет $ 0,00

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

Вопрос

Мне нужно отобразить валюту в моем приложении 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");
        }
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top