Dezimalzahl mit Zifferngruppierung formatieren und Anzahl der Ziffern begrenzen

8

Grundsätzlich versuche ich die Zahlenformatierung genau so durchzuführen wie der Windows-Rechner. Daher sind meine Anforderungen:

  • Begrenzen Sie die Anzahl der angezeigten Ziffern auf ein Maximum (z. B. 16). Das konnte ich mit number.ToString("G16") .
  • erreichen
  • Fügen Sie der Nummer eine Zifferngruppierung hinzu. Ich konnte dies erreichen mit: number.ToString(String.Format("#,0.{0};-#,0.{0}", New String("#"c, 15)))

Irgendwelche Ideen, wie man diese miteinander kombiniert, um das gleiche Verhalten wie Windows-Rechner zu bekommen?

Einige Beispiele mit der gewünschten Ausgabe:

Ich habe unten eine Antwort hinzugefügt, die ich verwenden würde, wenn die gewünschte Ausgabe nicht mit einer String-Formatierung erreicht werden kann. Fühlen Sie sich frei, irgendwelche Optimierungen / Änderungen zu dieser Antwort vorzuschlagen, wenn Sie keinen direkten Weg glauben, dies zu erreichen (was meine ursprüngliche Anforderung ist)

Tut mir leid, wenn ich irgendjemanden verwirrt habe. Ich dachte nur, dass es eine einfache String-Formatierung geben könnte, um das zu erreichen, und ich war - und bin immer noch - neugierig, ob das stimmt.

    
Ahmed Abdelhameed 06.12.2016, 22:18
quelle

4 Antworten

6

Nach einer Menge Suche zu diesem Thema. Sie können dies nicht mit einem einzelnen Format ausführen, da Sie nach einer IF .. ELSE LOGIC nicht für eine unidirektionale Formatierung ( Ausführen von zwei Formatierungen für eine Zahl )

fragen %Vor%

Sie müssen also ein IF verwenden, um dies zu erreichen

%Vor%

Update1

Basierend auf Ihrem Update verwenden Sie das folgende

%Vor%
  • dbl.ToString("G" &len) formatiert dbl auf eine feste Länge = len

  • Double.parse konvertiert das Ergebnis erneut in das Doppelte mit der neuen Länge. Hinweis: Wenn das Ergebnis e enthält, wird es nach dem Parsen gelöscht

  • ToString("#,#.#".PadRight(len, "#"), System.Globalization.CultureInfo.InvariantCulture) fügt dem doppelten Ergebnis Gruppen-Ziffern hinzu

Hinweis

Wenn die Länge ("G15") angegeben wird, wird die Zahl darauf gerundet. Es kann die Länge vom Dezimalteil reduzieren, aber es wird nicht von den ganzen Zahlen die Zahl auf die angegebene Länge runden. I.e. 1734.Tostring("G1") gibt 2000 zurück, aber nicht 2 / 1734.Tostring("G2") gibt 1700 , aber nicht 17

zurück

Wenn Sie Zahlen reduzieren wollen, müssen Sie String Funktionen wie Substring und Left nach Tostring("G1")

verwenden

Hoffe es hilft

    
Hadi 09.12.2016, 08:19
quelle
4

Ich kenne keine einfache Möglichkeit, das so zu machen, wie du es suchst.

Aber ich war ein neugieriger Kerl, und ich fragte mich, wie man das nur mit String-Methoden erreichen konnte.

Um klar zu sein, ich befürworte diesen Ansatz nicht als eine gute Lösung - es ist ziemlich schwierig, in einer Zeile zu verstehen, aber hey, eine interessante Übung für mich.

Wenn du Lust hast, es in einer schrecklichen Zeile (c #) zu machen:

%Vor%

Sonst etwas zerbrochen; es ist ein wenig klarer, welchen Ansatz ich nehme:

%Vor%

Ich füge am Ende der Zeichenfolge einen Dezimalpunkt hinzu, so dass mindestens ein Dezimalpunkt in der Zahl (Zeichenfolge) vorhanden ist. Ergreifen Sie dann den Text links vom ersten Dezimalpunkt und verketten Sie ihn mit einem beliebigen Text vom ersten und vom letzten Dezimalpunkt.

Wenn in der ursprünglichen Zeichenfolge kein Dezimalpunkt vorhanden war, sind diese beiden Punkte identisch - die Teilzeichenfolge ist 0 Zeichen lang - entfernt den hinzugefügten Dezimalpunkt.

    
K Scandrett 09.12.2016 22:39
quelle
3

Dies ist eine Antwort, die ich verwenden würde, wenn dies nicht mit einer String-Formatierung gemacht werden kann:

%Vor%

Dies wird -AFAICT- produzieren meine gewünschte Ausgabe (die gleiche Ausgabe von Windows-Rechner).

Ich dachte nur, es könnte eine einfache String-Formatierung geben, um das zu erreichen, und ich war - und bin immer noch - neugierig, ob das stimmt.

    
Ahmed Abdelhameed 09.12.2016 09:47
quelle
0

Sie können mit String.format um mehrere Formate anzuwenden. Lesen Sie mehr über Composite-Formatierung hier :

%Vor%

Getestet in vb.net

Sie können die Nullen löschen oder Ihre Formatierung verwenden, aber die ursprüngliche Frage betraf die Anwendung mehrerer Formate.

Sie Macht Notwendigkeit die Nummer zu lange konvertieren, während der Formatierung, testen Sie es auf Ihrer Seite aus.

Für Teil 2 können Sie nur% verwenden co_de% die Kommas für tausende Orte hinzufügen - Standard-Zahlenformatzeichenfolgen

    
TheUknown 06.12.2016 22:48
quelle

Tags und Links