Как я могу отформатировать десятичное свойство в валюте - PullRequest
51 голосов
/ 13 августа 2010

Я хочу отформатировать значение в получателе и вернуть форматированное значение валюты.

Возможно ли это, или мне нужно объявить свойство как строку, а затем использовать string.format.

Ответы [ 8 ]

91 голосов
/ 13 августа 2010

Свойства могут возвращать все, что захотят, но для этого потребуется вернуть правильный тип.

private decimal _amount;

public string FormattedAmount
{
    get { return string.Format("{0:C}", _amount); }
}

Был задан вопрос ... а что, если это десятичное число, которое можно обнулять?

private decimal? _amount;

public string FormattedAmount
{
    get
    {
         return _amount == null ? "null" : string.Format("{0:C}", _amount.Value);
    }
}  
31 голосов
/ 13 августа 2010

Ниже также будет работать, но вы не можете вставить в получатель десятичного свойства. Получатель десятичного свойства может возвращать только десятичное число, для которого форматирование не применяется.

decimal moneyvalue = 1921.39m; 
string currencyValue = moneyvalue.ToString("C");
9 голосов
/ 29 августа 2013

Попробуйте;

  string.Format(new CultureInfo("en-SG", false), "{0:c0}", 123423.083234);

Он преобразует 123423,083234 в формат $ 1,23,423.

4 голосов
/ 13 августа 2010

Вы можете использовать String.Format, см. Код [через How-to Geek ]:

decimal moneyvalue = 1921.39m;
string html = String.Format("Order Total: {0:C}", moneyvalue);
Console.WriteLine(html);
// Output: $1,921.39

Смотри также:

3 голосов
/ 17 апреля 2016

Вы можете создать метод расширения.Я считаю, что это хорошая практика, поскольку вам может потребоваться заблокировать отображение валюты независимо от настроек браузера.Например, вы можете захотеть всегда отображать $ 5000,00 вместо 5 000,00 $ (#CanadaProblems)

public static class DecimalExtensions
{
    public static string ToCurrency(this decimal decimalValue)
    {
        return $"{decimalValue:C}";
    }
}
2 голосов
/ 19 февраля 2016

Теперь вы можете использовать свойства интерполяции строк и выражения в C # 6.

private decimal _amount;

public string FormattedAmount => $"{_amount:C}";
1 голос
/ 13 августа 2010

Ваш возвращаемый формат будет ограничен типом возврата, который вы объявляете.Так что да, вы можете объявить свойство как строку и вернуть отформатированное значение чего-либо.В поле «get» вы можете указать любой код для поиска данных, который вам нужен.Поэтому, если вам нужно получить доступ к некоторому числовому значению, просто поместите свой оператор return как:

    private decimal _myDecimalValue = 15.78m;
    public string MyFormattedValue
    {
        get { return _myDecimalValue.ToString("c"); }
        private set;  //makes this a 'read only' property.
    }
0 голосов
/ 13 августа 2010

Десятичный тип не может содержать информацию о форматировании. Вы можете создать другое свойство, скажем FormattedProperty типа строки, которое делает то, что вы хотите.

...