Ja, das angegebene output ist vollkommen richtig und Ihr Verständnis ist auch richtig, dass {
, }
in string.Format
von {
, }
entkernt werden und die Zeichenkette in Number formatiert werden soll Verwende {0:N}
.
Aber wenn Sie nach der Ausgabe {95.00}
suchen, funktioniert das Format {{{0:N}}}
nicht wie erwartet, deshalb sollten wir nicht verstehen, wie die obige Anweisung interpretiert wird,
{
gefolgt von {
verstehen.
druckt
{
bei Ausgabe
{0:N}}}
, aber der Compiler ist verwirrt, dass }
die geschweifte Klammer von {0:N
beendet oder es ist eine geschweifte Klammer, gefolgt von }
, was zur Bildung eines benutzerdefinierten Formats führt 0:N}
. aber Regeln sagen, dass es als benutzerdefiniertes Format betrachtet werden sollte, daher wird es tatsächlich so interpretiert, dass es 0:N}
N
noch }
irgendetwas für ein benutzerdefiniertes numerisches Format bedeuten, werden diese Zeichen einfach ausgeschrieben und nicht der Wert der referenzierten Variablen. Also haben wir ausgegeben, {N}
.
Die detaillierte Erklärung für oben finden Sie unter String Format FAQ
Wenn Sie nach der Ausgabe {95.00}
suchen, verwenden Sie entweder {{ {0:N} }}
und es wird 95.00
als Ausgabe mit Leerzeichen zur Verfügung gestellt.
BEARBEITEN Die Lösung von Heinzi ist perfekt für die Ausgabe, die Sie erwarten,
%Vor% Ihr Verständnis ist richtig: Verwenden Sie zwei geschweifte Klammern, um eine einzelne literale Klammer zu erstellen. Das Problem besteht jedoch darin, dass in der Zeichenfolge }}}
die ersten zwei Klammern als literale Klammer interpretiert werden und nicht als zweite und dritte , wie Sie es beabsichtigen .
Tatsächlich ist Ihr Beispiel explizit auf der entsprechenden MSDN-Seite aufgeführt als mögliches Problem (Hervorhebung durch mich):
Die Art und Weise, wie geschweifte Klammern interpretiert werden, kann zu unerwarteten Ergebnissen führen. Betrachten Sie zum Beispiel das Formatelement "{{{0: D}}}", das eine öffnende geschweifte Klammer, einen numerischen Wert, der als Dezimalzahl formatiert ist, und eine schließende geschweifte Klammer anzeigen soll. Das Formatelement wird jedoch tatsächlich folgendermaßen interpretiert:
...
- Das nächste Zeichen ("D") wird als numerischer Dezimalformat-Spezifizierer interpretiert, aber die nächsten zwei geschweiften Klammern ("}}" ergeben eine einzelne geschweifte Klammer.
Die vorgeschlagene Lösung besteht darin, etwas wie folgt zu verwenden:
%Vor%Tags und Links c# string-formatting