我如何格式十进制属性到货币

我想在getter中格式化该值,并返回一个格式化的货币值。

这是可能的或者我需要将该属性声明为一个string,然后使用string.format。

属性可以返回任何他们想要的,但它将需要返回正确的types。

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,看代码[通过How-to Geek ]:

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

也可以看看:

  • 十进制(C#参考)在MSDN
  • 货币的十进制parsing

尝试这个;

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

它会将123423.083234转换为$ 1,2342。

您可以创build一个扩展方法。 我觉得这是一个很好的做法,因为无论浏览器设置如何,您都可能需要locking货币显示。 例如,您可能希望始终显示$ 5,000.00而不是5 000,00 $(#CanadaProblems)

 public static class DecimalExtensions { public static string ToCurrency(this decimal decimalValue) { return $"{decimalValue:C}"; } } 

您返回的格式将受到您声明的返回types的限制。 所以是的,你可以声明属性为一个string,并返回格式化的值。 在“获取”你可以把任何你需要的数据检索代码。 所以,如果你需要访问一些数值,只需把你的return语句作为:

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

现在,您可以在C#6中使用string插值和expression式的属性。

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

十进制types不能包含格式信息。 你可以创build另一个属性,比如一个stringtypes的FormattedProperty ,它可以做你想要的。