2009-08-23 9 views
10

Comment convertir deux à chaîne sans le pouvoir de représentation 10 (E-05)Comment convertir deux à chaîne sans le pouvoir de représentation 10 (E-05)

double value = 0.000099999999833333343; 
string text = value.ToString(); 
Console.WriteLine(text); // 9,99999998333333E-05 

Je voudrais la chaîne texte être ,000099999999833333343 (ou presque, je ne fais pas sorcier :)

J'ai essayé les variantes suivantes

Console.WriteLine(value.ToString());  // 9,99999998333333E-05 
Console.WriteLine(value.ToString("R20")); // 9,9999999833333343E-05 
Console.WriteLine(value.ToString("N20")); // 0,00009999999983333330 
Console.WriteLine(String.Format("{0:F20}", value)); // 0,00009999999983333330 

Doi Ng tostring N20 ou le format F20 semble plus proche de ce que je veux, mais je me retrouve avec beaucoup de zéros à la traîne, y at-il une manière intelligente d'éviter cela? Je voudrais être aussi proche que possible de la double représentation 0.000099999999833333343

Répondre

5

Vous n'avez pas besoin de string.Format(). Il suffit de mettre le droit format string dans la méthode .ToString() existante. Quelque chose comme "N" devrait faire.

+0

string.Format avec 'N' va ajouter des virgules, il n'utilisera pas seulement des entiers pour former la chaîne. Exemple: 34634859436785434 apparaîtra comme "34,634,859,436,785,400.00" –

5

Que diriez-vous

Convert.ToDecimal(doubleValue).ToString() 
+0

Ceci est une idée intelligente, mais la plage de 'float' (' e 3.402823e38') est supérieure à la plage de 'decimal' (' 79,228,162,514,264,337,593,543,950,335'). Ainsi, une valeur élevée entraînera une exception. –