Dalla documentazione risulta che la forma più compatta per rappresentare il numero sarà scelto.
I.e., quando non si specifica una stringa di formato, default is the "G" format string. Dal specification of the G format string segue:
Risultato: il più compatto di notazione a punto fisso o scientifico.
Il default for the number of digits è 15 con l'identificatore. Ciò significa che un numero rappresentabile come esattamente una determinata rappresentazione binaria (come 0.1 nell'esempio di harriyott) verrà visualizzato come punto fisso, a meno che la notazione esponenziale sia più compatta.
Quando ci sono più cifre, per impostazione predefinita, visualizza tutte queste cifre (fino a 15) e sceglie la notazione esponenziale una volta che è più breve.
aver realizzato tutto questo:
?(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
E, di interesse:
?(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
Questo è quello di mostrare ciò che accade dietro le quinte e perché 0.2
è scritto come 0.2
, non 0,20000000000000001
, che è in realtà è. Per impostazione predefinita, vengono visualizzate 15 cifre significative. Quando ci sono più cifre (e ci sono sempre, ad eccezione di alcuni numeri speciali), queste sono arrotondate nel modo normale. Dopo l'arrotondamento, gli zeri ridondanti vengono rimossi.
Si noti che una doppia ha una precisione di 15 o 16 cifre, a seconda del numero. Quindi, mostrando 15 cifre, quello che vedi è un numero correttamente arrotondato e sempre una rappresentazione completa e la rappresentazione più breve del doppio.
La risposta non include ciò che lo specificatore di precisione è, il che è parte del motivo per cui viene mostrato così com'è. L'impostazione predefinita è '15'. Inoltre, non è sempre la notazione più compatta. '0.0001' è maggiore di' 1E-04', ma il primo è in uscita. I documenti MS non sono completi qui. – Abel
@Abel: includerà entrambi i bit, grazie. –
Non sono d'accordo con il termine "più compatto" e considero la documentazione di msdn come fuorviante in questo senso. Se si prende il doppio x = 13950, il formato G4 produce "1.395E + 04", che è miglia da "più compatto". A mio parere, il formato "G" ha funzionato meglio in C, Fortran ecc. Dove ha prodotto davvero una stringa "più compatta". C# mi obbliga a cercare soluzioni alternative ... –