如何将小数属性格式化为货币?

91

我想将一个十进制值格式化为货币值。

我应该怎么做?

9个回答

130

属性可以返回任何值,但必须返回正确的类型。

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
3
您可以在字母 C 后面指定所需的小数位数,例如,如果您的值为 12.123,而您只想在输出中显示 2 个小数位,您可以使用 String.Format("{0:C2}", _amount.Value)。此外,如果您希望字符串按特定文化进行格式化,则可以指定 IFormatProvider。 - Yves Rochon

45

以下的方法也可以工作,但您不能将其放在十进制属性的 getter 中。十进制属性的 getter 只能返回一个十进制数,而这种格式化不适用于它。

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

13

试一试;

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

它将把123423.083234转换为$1,23,423格式。


10

您可以创建一个扩展方法。我发现这是一个很好的实践,因为您可能需要锁定货币显示,而不管浏览器设置如何。例如,您可能希望始终显示$5,000.00,而不是5 000,00 $(#CanadaProblems)。

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

5

4

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

private decimal _amount;

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

1

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

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

0

十进制类型不能包含格式信息。您可以创建另一个属性,例如字符串类型的FormattedProperty,以实现您想要的功能。


-2
在我的情况下,我必须将它转换为十进制数,如上所述,我使用了字符串格式方法,然后将其解析为十进制数,这对我很有效,以下是示例。 public decimal Amount; public decimal_amount;
因此,我像这样分配值:
Amount = decimal.Parse(String.Format("{0:C}", _amount))

1
这没有任何意义。这是货币,为什么值会在DatetimeOffset对象中呢? - siride
感谢您的评论指出,我意识到我在金额上使用了十进制,并在日期字段上使用了Datetimeoffset。 - Ira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接