2010-08-13 10 views

risposta

76

Le proprietà possono restituire tutto ciò che vogliono, ma sarà necessario restituire il tipo corretto.

private decimal _amount; 

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

La domanda è stata posta ... e se fosse un decimale annullabile.

private decimal? _amount; 

public string FormattedAmount 
{ 
    get 
    { 
     return _amount == null ? "null" : string.Format("{0:C}", _amount.Value); 
    } 
} 
+0

Cosa succede se l'importo è di un decimale nullable? – Groppe

+0

Ho modificato l'originale per darvi un esempio. – Robaticus

+0

È inoltre possibile specificare il numero di posizioni decimali desiderate dopo la lettera C, ad esempio se il valore era 12.123 e si desideravano solo 2 posizioni decimali nell'output, è possibile utilizzare String.Format ("{0: C2}", _amount.Value Inoltre, è possibile specificare un IFormatProvider se si desidera che la stringa venga formattata con una cultura specifica. –

0

Un tipo decimale non può contenere informazioni di formattazione. Puoi creare un'altra proprietà, ad esempio FormattedProperty di un tipo di stringa che esegue ciò che desideri.

26

Qui sotto funzionerebbe anche, ma non è possibile inserire il getter di una proprietà decimale. L'assorbitore di una proprietà decimale può solo restituire un decimale, per il quale la formattazione non si applica.

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

Il formato restituito sarà limitato dal tipo di reso dichiarato. Quindi sì, puoi dichiarare la proprietà come una stringa e restituire il valore formattato di qualcosa. Nel "get" puoi inserire qualsiasi codice di recupero dei dati di cui hai bisogno. Quindi, se hai bisogno di accedere ad alcuni valori numerici, inserisci semplicemente il tuo estratto conto come:

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

Prova questo;

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

Sarà convertire 123423,083,234 mila a $ 1,23,423 formato.

1

È ora possibile utilizzare l'interpolazione di stringa e di espressione proprietà con corpo in C# 6.

private decimal _amount; 

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

È possibile creare un metodo di estensione. Trovo che questa sia una buona pratica in quanto potrebbe essere necessario bloccare una visualizzazione della valuta indipendentemente dalle impostazioni del browser. Per esempio si può decidere di visualizzare $ 5,000.00 sempre invece di 5 000,00 $ (#CanadaProblems)

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