Warum wird 0.ToString("#.##")
eine leere Zeichenfolge zurückgegeben? Sollte es nicht sein 0.00
oder mindestens 0 ?
Warum wird 0.ToString("#.##")
eine leere Zeichenfolge zurückgegeben? Sollte es nicht sein 0.00
oder mindestens 0 ?
Antworten:
#
Geben Sie im Zeichenfolgenformat an, dass der Wert optional ist. Wenn Sie die Ausgabe erhalten möchten, 0.00
benötigen Sie Folgendes:
0.ToString("0.00");
Sehen Sie hier für die benutzerdefinierten Zahlenformate , die an diese Methode übergeben werden kann.
Da in einer Formatzeichenfolge das #
verwendet wird, um einen optionalen Zeichenplatzhalter zu kennzeichnen. Es wird nur verwendet, wenn dies zur Darstellung der Nummer erforderlich ist .
Wenn Sie dies stattdessen tun, erhalten 0.ToString("0.##");
Sie:0
Interessanterweise erhalten Sie, wenn Sie dies tun 0.ToString("#.0#");
:.0
Wenn Sie alle drei Ziffern möchten: 0.ToString("0.00");
Erzeugt:0.00
Aus den Kommentaren zu dieser Antwort geht hervor, dass Ihr Argument lautet:
es sollte '0' anzeigen, denn warum sollte jemand jemals eine leere Zeichenfolge sehen wollen, wenn der numerische Wert 0 ist?
Die Antwort ist einfach: Sie haben die Wahl, wie es angezeigt werden soll. Dafür sind die benutzerdefinierten Formatzeichenfolgen gedacht. Sie haben einfach die falsche Formatzeichenfolge für Ihre Anforderungen ausgewählt .
Gemäß der Dokumentation zum Ziffernplatzhalter .
Wenn der zu formatierende Wert eine Ziffer an der Stelle hat, an der das '#' in der Formatzeichenfolge erscheint, wird diese Ziffer in die Ergebniszeichenfolge kopiert. Andernfalls wird an dieser Position in der Ergebniszeichenfolge nichts gespeichert. Dieser Bezeichner zeigt niemals das Zeichen '0' an, wenn es sich nicht um eine signifikante Ziffer handelt, selbst wenn '0' die einzige Ziffer in der Zeichenfolge ist. Es wird das Zeichen '0' angezeigt, wenn es sich um eine signifikante Ziffer in der angezeigten Zahl handelt. Die Formatzeichenfolge "##" bewirkt, dass der Wert auf die nächste Stelle vor der Dezimalstelle gerundet wird, wobei immer eine Rundung von Null verwendet wird. Wenn Sie beispielsweise 34.5 mit "##" formatieren, erhalten Sie den Wert 35.
Wenn die Null angezeigt werden soll, verwenden Sie den Zero PlaceHolder
Wenn der zu formatierende Wert eine Ziffer an der Stelle hat, an der die '0' in der Formatzeichenfolge erscheint, wird diese Ziffer in die Ergebniszeichenfolge kopiert. Die Position der am weitesten links stehenden '0' vor dem Dezimalpunkt und der am weitesten rechts stehenden '0' nach dem Dezimalpunkt bestimmt den Bereich der Ziffern, die immer in der Ergebniszeichenfolge vorhanden sind.
Der Bezeichner "00" bewirkt, dass der Wert auf die nächste Stelle vor der Dezimalstelle gerundet wird, wobei immer eine Rundung von Null verwendet wird. Wenn Sie beispielsweise 34.5 mit "00" formatieren, erhalten Sie den Wert 35.
Versuche dies 0.ToString("#,##; #,##;0")
Der erste Abschnitt gilt für positive Werte, der zweite Abschnitt gilt für negative Werte und der dritte Abschnitt gilt für Nullen.
Verwenden Sie es so:
0.ToString("#0.##")
0
after stellt #
sicher, dass der Ausgabewert auf 0 gesetzt wird, wenn der Wert 0 ist. Andernfalls wird der Wert angezeigt. Also 0.0.ToString("#0.##")=0.00
und10.ToString("#.##")=10.00