C# Criando um número de número personalizado para exibir "gratuitamente" quando um valor de moeda é de US $ 0,00
-
28-09-2019 - |
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
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");
}
}