Dlaczego 0.ToString („#. ##”) zwraca pusty ciąg zamiast 0,00 lub przynajmniej 0?

114

Dlaczego 0.ToString("#.##")zwraca pusty ciąg? Nie powinno być, 0.00czy przynajmniej 0 ?

user960567
źródło

Odpowiedzi:

185

#w formacie ciągu wskazują, że wartość jest opcjonalna. Jeśli chcesz uzyskać dane wyjściowe 0.00, potrzebujesz:

0.ToString("0.00");

Zobacz tutaj niestandardowe formaty liczbowe, które można przekazać do tej metody.

Rich O'Kelly
źródło
3
Wciąż zdezorientowało mnie, dlaczego wynik nie jest 0. Ponieważ 0 nie jest opcjonalne. Czy puste ma sens?
user960567
135

Ponieważ w ciągu formatu, #jest używany do oznaczenia opcjonalnego znaku zastępczego; jest używany tylko w razie potrzeby do reprezentowania liczby.

Jeśli zamiast tego zrobisz to: 0.ToString("0.##");otrzymasz:0

Co ciekawe, jeśli to zrobisz: 0.ToString("#.0#");otrzymasz:.0

Jeśli chcesz mieć wszystkie trzy cyfry: 0.ToString("0.00");daje:0.00


Z komentarzy do tej odpowiedzi wynika, że ​​twój argument brzmi:

powinno pokazywać „0”, ponieważ po co ktoś miałby chcieć zobaczyć pusty ciąg, jeśli wartość liczbowa wynosi 0?

Odpowiedź jest prosta: masz wybór, w jaki sposób chcesz, aby był wyświetlany. Do tego służą ciągi formatu niestandardowego. Po prostu wybrałeś nieprawidłowy ciąg formatu dla swoich potrzeb .

Andrew Barber
źródło
20

Zgodnie z dokumentacją dotyczącą symbolu zastępczego cyfry .

Jeśli formatowana wartość ma cyfrę w miejscu, w którym w ciągu formatu pojawia się znak „#”, to ta cyfra jest kopiowana do ciągu wynikowego. W przeciwnym razie nic nie jest przechowywane w tej pozycji w ciągu wynikowym. Ten specyfikator nigdy nie wyświetla znaku „0”, jeśli nie jest to cyfra znacząca, nawet jeśli „0” jest jedyną cyfrą w ciągu. Wyświetli znak „0”, jeśli jest to znacząca cyfra w wyświetlanej liczbie. Ciąg formatu „##” powoduje zaokrąglenie wartości do najbliższej cyfry poprzedzającej przecinek, przy czym zawsze stosowane jest zaokrąglanie w kierunku od zera. Na przykład sformatowanie 34,5 za pomocą „##” dałoby wartość 35.

Jeśli chcesz, aby zero było wyświetlane, użyj Zero PlaceHolder

Jeśli formatowana wartość ma cyfrę w miejscu, w którym w ciągu formatu pojawia się „0”, ta cyfra jest kopiowana do ciągu wynikowego. Pozycja „0” najbardziej na lewo przed kropką dziesiętną i „0” z prawej strony po przecinku określa zakres cyfr, które są zawsze obecne w ciągu wynikowym.
Specyfikator „00” powoduje zaokrąglenie wartości do najbliższej cyfry poprzedzającej cyfrę dziesiętną, przy czym zawsze stosowane jest zaokrąglanie w kierunku od zera. Na przykład sformatowanie 34,5 za pomocą „00” zwróci wartość 35.

Miguel Madero
źródło
-1

Użyj tego w ten sposób:

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

0after #zapewni ustawienie wartości wyjściowej na 0, jeśli wartość wynosi 0, w przeciwnym razie wyświetli wartość. Więc 0.0.ToString("#0.##")=0.00i10.ToString("#.##")=10.00

user11530336
źródło