我想将一个十进制值格式化为货币值。
我应该怎么做?
属性可以返回任何值,但必须返回正确的类型。
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);
}
}
以下的方法也可以工作,但您不能将其放在十进制属性的 getter 中。十进制属性的 getter 只能返回一个十进制数,而这种格式化不适用于它。
decimal moneyvalue = 1921.39m;
string currencyValue = moneyvalue.ToString("C");
试一试;
string.Format(new CultureInfo("en-SG", false), "{0:c0}", 123423.083234);
它将把123423.083234转换为$1,23,423格式。
您可以创建一个扩展方法。我发现这是一个很好的实践,因为您可能需要锁定货币显示,而不管浏览器设置如何。例如,您可能希望始终显示$5,000.00,而不是5 000,00 $(#CanadaProblems)。
public static class DecimalExtensions
{
public static string ToCurrency(this decimal decimalValue)
{
return $"{decimalValue:C}";
}
}
decimal moneyvalue = 1921.39m;
string html = String.Format("Order Total: {0:C}", moneyvalue);
Console.WriteLine(html);
// Output: $1,921.39
另请参阅:
在C# 6中,您现在可以使用字符串插值和表达式主体属性。
private decimal _amount;
public string FormattedAmount => $"{_amount:C}";
你的返回格式将受到你声明的返回类型的限制。所以,是的,你可以将属性声明为字符串,并返回某些内容的格式化值。在“获取”中,你可以放置任何需要的数据检索代码。因此,如果你需要访问某些数字值,只需将你的返回语句设置为:
private decimal _myDecimalValue = 15.78m;
public string MyFormattedValue
{
get { return _myDecimalValue.ToString("c"); }
private set; //makes this a 'read only' property.
}
十进制类型不能包含格式信息。您可以创建另一个属性,例如字符串类型的FormattedProperty
,以实现您想要的功能。