Wie kann ich Dezimaleigenschaften in Währung formatieren?

71

Ich möchte einen Dezimalwert als Währungswert formatieren.

Wie kann ich das machen?

WingMan20-10
quelle

Antworten:

113

Eigenschaften können alles zurückgeben, was sie wollen, aber es muss der richtige Typ zurückgegeben werden.

private decimal _amount;

public string FormattedAmount
{
    get { return string.Format("{0:C}", _amount); }
}

Die Frage wurde gestellt ... was wäre, wenn es eine nullbare Dezimalstelle wäre?

private decimal? _amount;

public string FormattedAmount
{
    get
    {
         return _amount == null ? "null" : string.Format("{0:C}", _amount.Value);
    }
}  
Robaticus
quelle
Was passiert, wenn der Betrag eine nullbare Dezimalstelle ist?
Groppe
2
Sie können auch die Anzahl der gewünschten Dezimalstellen nach dem Buchstaben C angeben. Wenn Ihr Wert beispielsweise 12,123 war und Sie nur 2 Dezimalstellen in der Ausgabe haben möchten, können Sie String.Format ("{0: C2}", _amount) verwenden Außerdem können Sie einen IFormatProvider angeben, wenn Ihre Zeichenfolge für eine bestimmte Kultur formatiert werden soll.
Yves Rochon
35

Das Folgende würde auch funktionieren, aber Sie können den Getter einer Dezimaleigenschaft nicht eingeben. Der Getter einer Dezimaleigenschaft kann nur eine Dezimalzahl zurückgeben, für die die Formatierung nicht gilt.

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

Versuche dies;

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

Es wird 123423.083234 in das Format $ 1,23,423 konvertieren.

Mohan Gopi
quelle
8

Sie können eine Erweiterungsmethode erstellen. Ich halte dies für eine gute Vorgehensweise, da Sie möglicherweise eine Währungsanzeige unabhängig von der Browsereinstellung sperren müssen. Beispielsweise möchten Sie möglicherweise immer 5.000,00 USD anstelle von 5.000,00 USD anzeigen (#CanadaProblems).

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

In C # 6 können Sie jetzt die Eigenschaften der Zeichenfolgeninterpolation und des Ausdruckskörpers verwenden.

private decimal _amount;

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

Ihr zurückgegebenes Format wird durch den von Ihnen deklarierten Rückgabetyp begrenzt. Ja, Sie können die Eigenschaft als Zeichenfolge deklarieren und den formatierten Wert von etwas zurückgeben. In "get" können Sie den gewünschten Datenabrufcode eingeben. Wenn Sie also auf einen numerischen Wert zugreifen müssen, geben Sie Ihre return-Anweisung einfach wie folgt ein:

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

Ein Dezimaltyp darf keine Formatierungsinformationen enthalten. Sie können eine andere Eigenschaft erstellen, beispielsweise FormattedPropertyeinen Zeichenfolgentyp, der das tut, was Sie wollen.

rekursiv
quelle