Формат десятичного числа в валюту, должен быть в центах для значений от $ 0 до $ 1 - PullRequest
1 голос
/ 13 января 2011

У меня есть десятичная переменная, которая представляет сумму пожертвования.В настоящее время я отображаю его на экране в виде валюты, такой как -

DonationAmount.ToString("C");

Это дает следующий вывод (с учетом языка США)

1 -> $1.00
2 -> $2.00
0.5 -> $0.50

Я доволен первым двумя примерами, но я хочу, чтобы "0.5" показывалось как "50c".

Мое текущее решение с условным -

if (DonationAmount > 1)
   return (DonationAmount * 100m).ToString() + "c";
else
   return DonationAmount.ToString("C");

Есть ли лучший способ?

1 Ответ

3 голосов
/ 13 января 2011

Вы можете предоставить свой собственный модуль форматирования (скажем, "центы"), который будет форматировать строку как "50c".

Реализация собственной IFormatProvider не так уж и сложна. После этого вы передадите его в качестве параметра при вызове String.Format() или ToString().

Примеры этого можно найти здесь http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx или здесь http://www.codeproject.com/KB/cs/custstrformat.aspx.

public class StringFormatInfo : IFormatProvider, ICustomFormatter
{
   ...
}

return number.ToString("{0:cents}", new StringFormatInfo());
...