如何将十进制属性格式化为货币?


Answers:


113

属性可以返回他们想要的任何东西,但是它将需要返回正确的类型。

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);
    }
}  

如果金额是可为空的小数,会怎样?
Groppe '16

2
您还可以指定字母C后面所需的小数位数,例如,如果您的值是12.123,并且只希望在输出中保留2个小数位数,则可以使用String.Format(“ {0:C2}”,_amount .Value。此外,如果您希望将字符串格式化为特定区域性,则可以指定IFormatProvider
Yves Rochon 17-10-24

35

下面的方法也可以,但是您不能放入十进制属性的getter。十进制属性的getter只能返回不适用格式的十进制。

decimal moneyvalue = 1921.39m; 
string currencyValue = moneyvalue.ToString("C");


8

您可以创建扩展方法。我认为这是一个好习惯,因为无论浏览器设置如何,您都可能需要锁定货币显示。例如,您可能希望始终显示$ 5,000.00而不是5 000,00 $(#CanadaProblems)

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


2

现在,您可以在C#6中使用字符串插值和表达式合并属性。

private decimal _amount;

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

1

您返回的格式将受到您声明的返回类型的限制。因此,可以的,您可以将属性声明为字符串,然后返回某些内容的格式化值。在“获取”中,您可以放置​​所需的任何数据检索代码。因此,如果您需要访问一些数值,只需将return语句放入:

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

0

十进制类型不能包含格式信息。您可以创建另一个属性,例如可以FormattedProperty执行所需操作的字符串类型。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.