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