Grundsätzlich versuche ich die Zahlenformatierung genau so durchzuführen wie der Windows-Rechner. Daher sind meine Anforderungen:
number.ToString("G16")
. 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.
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 )
Sie müssen also ein IF
verwenden, um dies zu erreichen
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
Wenn Sie Zahlen reduzieren wollen, müssen Sie String Funktionen wie Substring
und Left
nach Tostring("G1")
Hoffe es hilft
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.
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.
Sie können mit String.format um mehrere Formate anzuwenden. Lesen Sie mehr über Composite-Formatierung hier :
%Vor%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
Tags und Links c# vb.net string-formatting