2010-08-13 2 views

ответ

76

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

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); 
    } 
} 
+0

Что произойдет, если сумма является обнуляемым десятичной? – Groppe

+0

Я отредактировал оригинал, чтобы привести пример. – Robaticus

+0

Вы также можете указать количество нужных знаков после запятой после буквы C, например, если ваше значение было 12.123, и вам нужно было только 2 десятичных знака в выводе, вы можете использовать String.Format («{0: C2}», _amount.Value. Кроме того, вы можете указать IFormatProvider, если хотите, чтобы ваша строка была отформатирована в определенной культуре. –

0

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

26

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

decimal moneyvalue = 1921.39m; 
string currencyValue = moneyvalue.ToString("C"); 
1

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

private decimal _myDecimalValue = 15.78m; 
    public string MyFormattedValue 
    { 
     get { return _myDecimalValue.ToString("c"); } 
     private set; //makes this a 'read only' property. 
    } 
6

Попробуйте это;

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

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

1

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

private decimal _amount; 

public string FormattedAmount => $"{_amount:C}"; 
2

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

public static class DecimalExtensions 
{ 
    public static string ToCurrency(this decimal decimalValue) 
    { 
     return $"{decimalValue:C}"; 
    } 
} 
Смежные вопросы