Z dokumentacji wynika, że najbardziej kompaktowa forma do reprezentowania numer zostanie wybrany.
Np. Gdy nie zostanie podany ciąg formatu, default is the "G" format string. Od numeru specification of the G format string:
Wynik: najbardziej kompaktowa z notacji stałej lub naukowej.
Urządzenie default for the number of digits ma 15 znaków ze specyfikatorem. Oznacza to, że liczba reprezentowana jako dokładnie pewną binarną reprezentację (jak 0,1 w przykładzie harriyotta) będzie wyświetlana jako punkt stały, chyba że notacja wykładnicza jest bardziej zwarta.
Gdy jest więcej cyfr, domyślnie wyświetla wszystkie te cyfry (do 15) i wybiera notację wykładniczą, gdy jest ona krótsza.
Kładzenie to razem:
?(1.0/7.0).ToString()
"0,142857142857143" // 15 digits
?(10000000000.0/7.0).ToString()
"1428571428,57143" // 15 significant digits, E-notation not shorter
?(100000000000000000.0/7.0).ToString()
"1,42857142857143E+16" // 15 sign. digits, above range for non-E-notation (15)
?(0.001/7.0).ToString()
"0,000142857142857143" // non E-notation is shorter
?(0.0001/7.0).ToString()
"1,42857142857143E-05" // E-notation shorter
I, zainteresowania:
?(1.0/2.0).ToString()
"0,5" // exact representation
?(1.0/5.0).ToString()
"0,2" // rounded, zeroes removed
?(1.0/2.0).ToString("G20")
"0,5" // exact representation
?(1.0/5.0).ToString("G20")
"0,20000000000000001" // unrounded
to, aby pokazać, co dzieje się za sceną i dlaczego 0.2
jest napisane jak 0.2
, nie 0,20000000000000001
, która jest faktycznie jest. Domyślnie wyświetlanych jest 15 cyfr znaczących. Kiedy jest więcej cyfr (i zawsze są, z wyjątkiem pewnych liczb specjalnych), są one zaokrąglane w zwykły sposób. Po zaokrągleniu zbędne zera są usuwane.
Należy zauważyć, że podwójny ma precyzję 15 lub 16 cyfr, w zależności od liczby. Tak więc, pokazując 15 cyfr, widzimy prawidłowo zaokrągloną liczbę i zawsze pełną reprezentację i najkrótszą reprezentację podwójnej.
Odpowiedź nie zawiera specyfikacji precyzji, która jest częścią tego, dlaczego jest pokazywana w taki sposób. Wartością domyślną jest '15'. Ponadto nie zawsze jest to najbardziej kompaktowy zapis. '0.0001' jest większe niż' 1E-04', ale pierwsze jest wyprowadzane. Dokumenty MS nie są kompletne tutaj. – Abel
@Abel: Zawiera oba bity, dziękuję. –
Nie zgadzam się z terminem "najbardziej kompaktowy" i uważam dokumentację msdn za wprowadzającą w błąd pod tym względem. Jeśli weźmiesz podwójne x = 13950, to format G4 generuje "1.395E + 04", który jest mil od "najbardziej kompaktowy". Moim zdaniem format "G" działał lepiej w C, Fortran itd., Gdzie naprawdę powstał "najbardziej zwarty" ciąg. C# zmusza mnie do szukania obejść ... –