Desidero formattare il valore nel getter e restituire un valore di valuta formattato.Come posso formattare la proprietà decimale in valuta
È possibile o devo dichiarare la proprietà come stringa e quindi utilizzare string.format.
Desidero formattare il valore nel getter e restituire un valore di valuta formattato.Come posso formattare la proprietà decimale in valuta
È possibile o devo dichiarare la proprietà come stringa e quindi utilizzare string.format.
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);
}
}
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.
È possibile utilizzare String.Format, vedere il codice [via How-to Geek]:
decimal moneyvalue = 1921.39m;
string html = String.Format("Order Total: {0:C}", moneyvalue);
Console.WriteLine(html);
// Output: $1,921.39
Vedi anche:
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");
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.
}
Prova questo;
string.Format(new CultureInfo("en-SG", false), "{0:c0}", 123423.083234);
Sarà convertire 123423,083,234 mila a $ 1,23,423 formato.
È ora possibile utilizzare l'interpolazione di stringa e di espressione proprietà con corpo in C# 6.
private decimal _amount;
public string FormattedAmount => $"{_amount:C}";
È 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}";
}
}
Cosa succede se l'importo è di un decimale nullable? – Groppe
Ho modificato l'originale per darvi un esempio. – Robaticus
È 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. –