Warum gibt 0.ToString ("#. ##") eine leere Zeichenfolge anstelle von 0,00 oder mindestens 0 zurück?

114

Warum wird 0.ToString("#.##")eine leere Zeichenfolge zurückgegeben? Sollte es nicht sein 0.00oder mindestens 0 ?

user960567
quelle

Antworten:

185

#Geben Sie im Zeichenfolgenformat an, dass der Wert optional ist. Wenn Sie die Ausgabe erhalten möchten, 0.00benötigen Sie Folgendes:

0.ToString("0.00");

Sehen Sie hier für die benutzerdefinierten Zahlenformate , die an diese Methode übergeben werden kann.

Rich O'Kelly
quelle
3
Eine Sache verwirrte mich immer noch, warum das Ergebnis nicht 0 ist. Weil 0 nicht optional ist. Ist leer sinnvoll?
user960567
135

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 .

Andrew Barber
quelle
20

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.

Miguel Madero
quelle
-1

Verwenden Sie es so:

0.ToString("#0.##")

0after 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.00und10.ToString("#.##")=10.00

user11530336
quelle