2011-01-13 10 views
1

Ich habe eine Dezimal-Variable, die eine Spende Betrag darstellt. Derzeit bin ich die Anzeige es auf dem Bildschirm als Währung wie sogenannten

DonationAmount.ToString("C"); 

Dies ergibt die folgende Ausgabe (bei einer US-locale)

1 -> $1.00 
2 -> $2.00 
0.5 -> $0.50 

Ich bin glücklich mit dem beide ersten Beispiel, aber will habe "0.5" als "50c" angezeigt.

Meine aktuelle Lösung ist mit einem conditional-

if (DonationAmount > 1) 
    return (DonationAmount * 100m).ToString() + "c"; 
else 
    return DonationAmount.ToString("C"); 

Gibt es einen besseren Weg?

Antwort

3

Sie können Ihren eigenen benutzerdefinierten Formatierer (zB "Cent") angeben, der die Zeichenfolge als "50c" formatiert.

Implementieren Sie Ihre eigenen IFormatProvider ist nicht so schwierig. Sobald Sie das getan haben, würden Sie es als Parameter übergeben, wenn Sie String.Format() oder ToString() aufrufen.

Beispiele hierfür finden Sie hier http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx oder hier http://www.codeproject.com/KB/cs/custstrformat.aspx.

public class StringFormatInfo : IFormatProvider, ICustomFormatter 
{ 
    ... 
} 

return number.ToString("{0:cents}", new StringFormatInfo());