2 Stimmen

Unregelmäßigkeit bei der benutzerdefinierten Zahlenformatierung mit ToString()

Ich versuche, Zahlen in der Form 123456 in 123.456 zu konvertieren, die ich einfach genug finde, indem ich die .NET ToString()-Methode mit einem benutzerdefinierten Format von N0.

In einem Fall von Daten erhalte ich jedoch bei Verwendung dieser Methode seltsame Formate.

In diesem Fall generiere ich dynamisch eine DataTable für meine Eingabetabelle, um den Code zu testen.

DataTable dt = new DataTable();

dt.Columns.Add("Cases", typeof(Int32));

Meine Daten sehen zum Beispiel so aus, bevor sie formatiert werden.

\--------------------------------------------
| Cases | 2495 | 3937 | 3207 | 4173 | 4265 |
--------------------------------------------

Ich möchte, dass es so aussieht.

\-------------------------------------------------
| Cases | 2,495 | 3,937 | 3,207 | 4,173 | 4,265 |
-------------------------------------------------

Ich versuche, sie mit einem Code wie diesem zu formatieren.

output.Rows[r][c] = Convert.ToInt32(input.Rows[c - 1][r + 1]).ToString("N0");

(Hinweis: Der Grund für die seltsame Formatierung ist, dass ich eine DataTable nehme und sie in eine andere DataTable transponiere).

Mit der obigen Formatierung erhalte ich nun die folgenden Daten zurück.

\--------------------------------------------------------------------------
| Cases | 01/02/0495 | 01/03/0937 | 01/03/0207 | 01/04/0173 | 01/04/0265 |
--------------------------------------------------------------------------

Dann habe ich es mit einem Dezimalpunkt versucht:

output.Rows[r][c] = Convert.ToInt32(input.Rows[c - 1][r + 1]).ToString("N01");

Dies führte zu folgendem Ergebnis.

\------------------------------------------------------
| Cases | 2495.0 | 3937.0 | 3207.0 | 4173.0 | 4265.0 |
------------------------------------------------------

Das hat mich jetzt verwirrt, weil es die Tatsache akzeptiert, dass die Zahl auf diese Weise formatiert werden kann.

Als Nächstes habe ich verschiedene Möglichkeiten der Formatierung von Zeichenketten ausprobiert, etwa so.

output.Rows[r][c] = string.Format("{0:N0}", input.Rows[c - 1][r + 1]);
output.Rows[r][c] = Convert.ToInt32(input.Rows[c - 1][r + 1]).ToString("#,##0");

Keiner von ihnen gibt das Zahlenformat so wieder, wie ich es gerne hätte. Kann mir jemand sagen, was ich falsch mache? Ist es so einfach, dass ich den Punkt übersehen habe?

1voto

Marc Gravell Punkte 970173

Für mich sieht es einfach so aus, dass Sie den Datentyp der Spalten in der Datei DataTable falsch. Versuchen Sie, es ausdrücklich als int (es sieht aus wie DateTime im Moment).

Außerdem - die Aufgabe der DataTable soll halten Daten; nicht um sie zu verteilen. Sie könnten sie vorformatiert speichern als string s, denke ich (solange Sie sagen dass die Spalten Zeichenketten sind) - aber wenn Sie sie als int und vergessen Sie dann die Anzeige; sobald Sie die Convert.ToInt32 ist Ihr Job vorbei. Wie es aussieht, ist die Aufgabe des DataGridView (oder was auch immer); sagen Sie dass über "N0"...

0voto

Fenton Punkte 221749

Versuchen Sie, einfach "N" wie in ToString("N") zu verwenden;

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