Я хочу отформатировать значение в getter и вернуть сформированное значение валюты.
Возможно ли это, или мне нужно объявить свойство как строку, а затем использовать string.format.
Я хочу отформатировать значение в getter и вернуть сформированное значение валюты.
Возможно ли это, или мне нужно объявить свойство как строку, а затем использовать string.format.
Свойства могут возвращать все, что они хотят, но нужно вернуть правильный тип.
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);
}
}
Ниже также будет работать, но вы не можете установить получателя десятичного свойства. Получатель десятичного свойства может возвращать только десятичное число, для которого форматирование не применяется.
decimal moneyvalue = 1921.39m;
string currencyValue = moneyvalue.ToString("C");
Вы можете использовать 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
См. также:
Попробуйте это;
string.Format(new CultureInfo("en-SG", false), "{0:c0}", 123423.083234);
Он преобразует 123423.083234 в формат $1,23,423.
Вы можете создать метод расширения. Я считаю, что это хорошая практика, поскольку вам может потребоваться заблокировать отображение валюты независимо от настройки браузера. Например, вы можете отображать $5000.00 всегда вместо 5 000,00 $ (#CanadaProblems)
public static class DecimalExtensions
{
public static string ToCurrency(this decimal decimalValue)
{
return $"{decimalValue:C}";
}
}
Ваш возвращенный формат будет ограничен типом возвращаемого вами типа. Итак, да, вы можете объявить свойство как строку и вернуть отформатированное значение чего-то. В "get" вы можете поместить любой код поиска данных, который вам нужен. Поэтому, если вам нужно получить доступ к некоторому числовому значению, просто поставьте оператор return как:
private decimal _myDecimalValue = 15.78m;
public string MyFormattedValue
{
get { return _myDecimalValue.ToString("c"); }
private set; //makes this a 'read only' property.
}
Теперь вы можете использовать свойства интерполяции строк и выражения в С# 6.
private decimal _amount;
public string FormattedAmount => $"{_amount:C}";
Десятичный тип не может содержать информацию о форматировании. Вы можете создать другое свойство, скажем FormattedProperty
строкового типа, который делает то, что вы хотите.