it-swarm.com.de

Wie würde ich Tausende mit Leerzeichen in C # trennen

Angenommen, ich habe die folgende Dezimalzahl, die ich so formatieren muss, dass jedes Tausend mit Leerzeichen getrennt wird:

 897.11 to 897.11
 1897.11 to 1 897.11
 12897.11 to 12 897.11
 123897.11 to 123 897.11

Ich habe Decimal.ToString ("0 000.00") ausprobiert. Obwohl dies ziemlich gut funktioniert, wenn die Nummer 1897.11 ist. Wenn es 897,11 ist, bekomme ich 0 897,11. 

27

Übergeben Sie eine benutzerdefinierte NumberFormatInfo mit einer benutzerdefinierten NumberGroupSeparator-Eigenschaft und verwenden Sie das #,#-Format , um Zahlengruppen anzugeben. In diesem Beispiel wird das Zahlenformat der invarianten Kultur als Grundlage verwendet.

var nfi = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();
nfi.NumberGroupSeparator = " ";
string formatted = 1234897.11m.ToString("#,0.00", nfi); // "1 234 897.11"
54
Tim S.

Sie benötigen einen benutzerdefinierten Zahlenformatanbieter, bei dem Sie den Buchstaben selbst ändern:

    static void Main(string[] args)
    {
        decimal d = 2000000;

        var f = new NumberFormatInfo {NumberGroupSeparator = " "};

        var s = d.ToString("n", f); // 2 000 000.00
    }

Hier muss auch angegeben werden, dass es als Zahl formatiert werden soll (mit "n"). Weitere Formatierungsoptionen finden Sie unter diesem Link:

Numerische Standardformatzeichenfolgen

In diesem Fall funktioniert es nicht, wenn Sie als Währung oder als Prozentsatz formatieren, da NumberFormatInfo, wie Sie vielleicht bereits wissen, über separate Eigenschaften für diese verfügt.

Die aktuellen Informationen zum Kulturformat finden Sie unter System.Globalization.CultureInfo.CurrentCulture.NumberFormat.

17

mit einem benutzerdefinierten Format-String , aber mit '#' nicht '0' ist eine 0 ein obligatorisches Token, egal wie lang die Zahl ist, das Rautenzeichen (#) ist ein optionales Token, es wird nur sein Wird für tatsächlich in der Nummer enthaltene Ziffern verwendet. 

  Decimal.ToString("# ###.00")  

HINWEIS. Ich lasse das hier, aber die Antwort von @ Tim S ist besser. 

Wenn ich das versuche, sehe ich, dass es nur das erste Trennzeichen generiert ... Ich denke, das Trennzeichen funktioniert hier nur für Kommas und Punkte. Versuchen Sie es stattdessen, um dieses Problem zu umgehen (bis zu der von Ihnen erwarteten maximalen Größe).

  Decimal.ToString("# ### ### ### ###.00")  
6
Charles Bretana

versuche dies

int testNumber = 134566548;
Console.WriteLine(string.Format("{0:N}", testNumber));

Sie erhalten: 134 566 548,00

Vergiss deine Kultur nicht.

6
Matthieu M

Norwegisches Gebietsschema verwendet Leerzeichen als Trennzeichen. Wenn Sie also eine Website oder Anwendung speziell für Norweger entwerfen, können Sie Folgendes verwenden:

(123897.11).ToString("n",new CultureInfo("nb-NO"))

Was in ... resultiert 

"123 897,11"

Wenn Sie keine Bewerbung für den norwegischen Markt schreiben, wäre dies natürlich eine dumme Lösung. 

1
Fiach Reid