16 Stimmen

Eine Zahl mit Kommas formatieren, aber Dezimalstellen beibehalten

Ich möchte die Ziffern in einem Double nach Tausendern gruppieren, aber auch ausgeben, wie viele Dezimalstellen tatsächlich in der Zahl enthalten sind. Ich kann die Formatzeichenfolge nicht herausfinden.

 1000 => 1,000
 100000 => 100,000
 123.456 => 123.456
 100000.21 => 100,000.21
 100200.123456 => 100,200.123456

Haftungsausschlüsse (es ist nicht so einfach, wie Sie denken):

  • Bitte verweisen Sie mich nicht auf diese Frage er beantwortet meine Frage nicht
  • Bitte verweisen Sie mich nicht auf MS DN (Wenn Sie glauben, dass ich sie falsch lese, lesen Sie sie selbst und posten Sie die richtige Antwort)
  • .ToString("n") funktioniert nicht, es rundet die Ziffern

11voto

James Curran Punkte 98228

Dies scheint genau das zu tun, was Sie wollen:

public void Code(params string[] args)
{
    Print(1000);
    Print(100000);
    Print(123.456);
    Print(100000.21 );
    Print(100200.123456);
}

void Print(double n)
{
    Console.WriteLine("{0:###,###.#######}", n);
}

1,000
100,000
123.456
100,000.21
100,200.123456

2voto

Rich Newman Punkte 21

Ein altes Thema, aber keine der Antworten scheint mir ganz zufriedenstellend zu sein. Bei den meisten wird aus der Null eine leere Zeichenkette, auch bei der mit den meisten positiven Bewertungen.

Ich denke, eine bessere Lösung wäre "#,##0.#################" die zumindest Nullen anzeigt. Es ist aber immer noch hässlich. Es muss einen besseren Weg geben.

double[] vals = new double[] { 0.0, 0.1234, -0.1234, 1.0, 
                               123456789.123456, 123456789.0, 
                               0.123456789123456 };
foreach (double val in vals) 
{ 
    Console.WriteLine(val + ": " + val.ToString("#,##0.#################")); 
}

1voto

dragonjujo Punkte 348

Versuchen Sie es einfach mit "#,#", das fügt die Kommas für Tausender usw. hinzu, aber ich weiß nicht, ob es die Dezimalstellen beibehält, andernfalls "#,###.####################" oder eine beliebige Anzahl von '#'-Symbolen, die Sie nach der Dezimalstelle wünschen.

0voto

Joel Coehoorn Punkte 377088

Versuchen Sie dies:

VB:

Dim vals() As Double = {1000, 100000, 123.456, 100000.21, 100200.123456}
For Each val As Double in vals
   Console.WriteLine(val.ToString("###,###.#########"))
Next val

C#:

double[] vals = new double[] {1000, 100000, 123.456, 100000.21, 100200.123456};
foreach (double val in vals)
{
    Console.WriteLine(val.ToString("###,###.#########"));
}

Das Problem ist, dass es kein Format gibt, das eine beliebige Anzahl von Dezimalstellen verarbeiten kann. Da Sie jedoch nur speichern. eine sehr begrenzte Genauigkeit, können Sie einfach das verwenden und ein paar weitere #-Zeichen hinzufügen, um es abzudecken, vorausgesetzt, Sie sind bereit, alle unbedeutenden 0's abzuschneiden.

Und der MSDN-Link, den Sie gepostet haben, ist genau die Stelle, an der Sie nachlesen können, wie man das macht.

0voto

Aaron Fischer Punkte 20373

Sie können eine benutzerdefinierte Formatzeichenfolge erstellen .ToString("###,###.######") Benutzerdefinierte numerische Formatzeichenfolgen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X