C# Criando um número de número personalizado para exibir "gratuitamente" quando um valor de moeda é de US $ 0,00

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

Pergunta

Preciso exibir uma moeda no meu aplicativo ASP.NET MVC, mas quando a moeda é 0, eu gostaria que ela exibisse "grátis" (localizada, é claro!) Em vez de US $ 0,00.

Então, quando eu tenho algo assim ...

Decimal priceFree = 0.00;
Decimal priceNotFree = 100.00;

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

A saída é "US $ 0,00" "$ 100,00"

Eu gostaria que fosse "grátis" "$ 100,00"

Imagino que eu possa usar o método .ToString (formato de string, IformatProvider FormatProvider) para conseguir isso, mas não tenho certeza de como fazer isso. Óbvio, eu quero reutilizar o máximo possível do número deformatinfo e apenas substituí -lo quando a entrada for 0. Nesse caso, posso retornar simples um recurso localizado que contém minha string "gratuita".

Então, como faço isso?

Obrigado

Foi útil?

Solução

Eu acho que o caminho mais fácil a seguir seria um método de extensão:

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

Se você quiser ir com o IFormatProvider, Há um bom exemplo no msdn.

Outras dicas

Usar

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

Que tal um método de extensão:

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

Então

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

Em vez de usar um iformatprovider personalizado e passá -lo a cada vez, que tal:

 public static class MyFormatter
    {
        public static string ToFreeString(this decimal d)
        {
            return d == 0 ? "Free" : d.ToString("d");
        }
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top