2012-07-31 3 views

Antwort

53

Es gibt verschiedene Wege, dies zu erreichen, aber für mich die einfachste und schnellste ist the "," custom specifier

double value = 1234567890; 

    // Displays 1,234,567,890 
    Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture)); 

    // Displays 1,234,568K 
    Console.WriteLine(value.ToString("#,##0,K", CultureInfo.InvariantCulture)); 

    // Displays 1,235M 
    Console.WriteLine(value.ToString("#,##0,,M", CultureInfo.InvariantCulture)); 

    // Displays 1B 
    Console.WriteLine(value.ToString("#,##0,,,B", CultureInfo.InvariantCulture)); 
+1

beiden ICustomFormatter und IFormatProvider Schnittstellen sein, wenn ich es als verwenden „#, ## 0 ,,,. 00B“ Es ist die letzte Nachkommastelle abgerundet, aber ich will es nicht. – pxm

+2

value.ToString ("0 ,,,. # B", CultureInfo.InvariantCulture) => 1.2B – NIBERIUM

+0

Wie kann ich das mit der Währung verwenden? –

4

Sie können ein ICustomFormatter implementieren, die den Wert von tausend, Millionen oder Milliarden teilen, und es wie folgt verwendet werden:

var result = string.Format(new MyCustomFormatter(), "{0:MyFormat}", number); 
+0

Die Umsetzung sollte – KD2ND

4

ich benutze diese Mischung von Formaten in einer Erweiterungsmethode zu verwenden (fügen sie ihn einfach zu Ihrem Projekt und genießen)

public static string ToKMB(this decimal num) 
{ 
    if (num > 999999999) 
    { 
     return num.ToString("0,,,.###B", CultureInfo.InvariantCulture); 
    } 
    else 
    if (num > 999999) 
    { 
     return num.ToString("0,,.##M", CultureInfo.InvariantCulture); 
    } 
    else 
    if (num > 999) 
    { 
     return num.ToString("0,.#K", CultureInfo.InvariantCulture); 
    } 
    else 
    { 
     return num.ToString(CultureInfo.InvariantCulture); 
    } 
} 

Verwendung:

((decimal)235).ToKMB(); 
// 235 

((decimal)1235).ToKMB(); 
// 1.2K 

((decimal)6271235).ToKMB(); 
// 6.27M 

((decimal)93246571235).ToKMB(); 
// 93.247B 

Es Rückkehr mehr Details für größere Zahlen und wie es. Sie können auch eine Überschreibung hinzufügen, um int, long und double ohne Casting zu unterstützen.

Verwandte Themen