2012-10-24 13 views
29

Właśnie zauważyłem niektóre z moich kodu używa:Jaka jest różnica między toString ("D2") .ToString ("00")

ToString("D2") 

i innych zastosowań:

.ToString("00") 

Obie te służy do konwersji liczb od 0 do 99 na ciągi od 00 do 99. To jest ciągi, w których cyfry 0-9 mają wiodące zero.

Czy obie te metody robią to samo?

+0

Udało mi się wydrukować wartość "int" wynoszącą 1000, która przekracza liczbę "0 do 99", o której wspomniałeś. 'int num = 1000; Console.WriteLine ("num.toString (\" D2 \ ") =" + num.ToString ("D2")), '// drukuje" num.toString ("D2") = 1000 " –

Odpowiedz

30

To interesujące pytanie. Jedyna różnica, którą odkryłem do tej pory, to:

format "D2" akceptuje tylko wartości typu całkowitego. Gdzie jako format "00" działałby również z pływakami/podwójnymi.

Format D - MSDN

Obsługiwany przez: Tylko Integral typów.

Rozważmy trzy następujące linie:

double d = 23.05123d; 
int i = 3; 
Console.Write(i.ToString("D2")); 
Console.Write(d.ToString("00")); 
Console.Write(d.ToString("D2")); //this will result in exception: 
           //Format specifier was invalid. 
8

Od MSDN Custom Numeric Format Strings:

"00" specifier powoduje, że wartość zostanie zaokrąglona do najbliższej cyfry poprzedzające przecinku, gdzie zaokrąglania dala od zera jest zawsze używane. Na przykład, formatowanie 34,5 z „00” doprowadziłoby do wartości 35.

I MSDN Standard Numeric Format Strings:

Precyzja specifier wskazuje minimalną liczbę cyfr wymaganych w wynikowym ciągu znaków. W razie potrzeby liczba jest uzupełniana zerami po lewej stronie, aby uzyskać liczbę cyfr określoną przez specyfikator precyzji.

więc odpowiedzieć na pytanie, zgodnie z docs te nie specjalnie zrobić to samo, ale w tobie przypadku możliwe jest, że są one przeznaczone do. Na przykład:

double d = 3.678; 
Console.WriteLine(d.ToString("00")); 
Console.WriteLine(4.ToString("D2")); 

Will zarówno wydruk 04. Mogę sobie wyobrazić, że te dwa formaty są używane, ponieważ D2 nie jest poprawny dla podwójnych.