我如何格式十进制属性到货币
我想在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
,它可以做你想要的。