Wie kann ich Dezimaleigenschaften in Währung formatieren?


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

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

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.


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


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

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.
    }

0

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.